nx_fbx_affine_gate_t32.nx source
↩ module page · 37 lines · 3581 B
1// Real original Knight affine qualification; no asset or page mutation.
2import "nx_fbx_affine_t32.nx"
3func main()->i64{
4 let bytes:i64=8769868;let input:*u8=sys_mmap(bytes);let state:*i64=sys_mmap(24) as *i64
5 if rc_read_file_into("/tmp/nx_bind_source_t29.fbx" as *u8,input,bytes,state)!=bytes||rc_complete(state)==0{return 2}
6 let original:*u8=sys_mmap(bytes);var k:i64=0;while k<bytes{original[k]=input[k];k=k+1}
7 let scene:*FbxAffineScene=sys_mmap(__size_of(FbxAffineScene)) as *FbxAffineScene
8 let rc:i64=af_load(input,bytes,463784955,10125520,6,147,4893,scene)
9 nb_text("affine_load_rc=" as *u8);nb_num(rc);nb_text(" models=" as *u8);nb_num(scene.count);nb_text(" curves=" as *u8);nb_num(scene.curve_count);nb_text("\n" as *u8)
10 if rc!=0||scene.count!=147||scene.curve_count!=1026{return 3}
11 let out:*i64=sys_mmap(scene.count*128) as *i64
12 if af_evaluate(scene,0,0,out,scene.count*16)!=0{return 4}
13 let bind:*FbxBindScene=sys_mmap(__size_of(FbxBindScene)) as *FbxBindScene
14 bind.count=scene.count;bind.objects=sys_mmap(scene.count*__size_of(FbxBindObject)) as *FbxBindObject
15 k=0;while k<scene.count{let object:*FbxBindObject=fbb_object(bind,k);object.id=af_model(scene,k).id;object.kind=FBB_MODEL;k=k+1}
16 if fbb_pose_models(input,bytes,bind)!=0{return 5}
17 var max_linear:i64=0;var max_translation:i64=0;var matched:i64=0;k=0
18 while k<scene.count{let object:*FbxBindObject=fbb_object(bind,k);if object.matrix!=0{matched=matched+1;let pose:*i64=object.matrix as *i64;var j:i64=0;while j<16{var delta:i64=out[k*16+j]-pose[j];if delta<0{delta=0-delta};if j>=12&&j<=14{if delta>max_translation{max_translation=delta}}else{if delta>max_linear{max_linear=delta}};j=j+1}};k=k+1}
19 nb_text("bind_reference matched=" as *u8);nb_num(matched);nb_text(" max_linear_q20=" as *u8);nb_num(max_linear);nb_text(" max_translation_q20_cm=" as *u8);nb_num(max_translation);nb_text(" correspondence=MEASURED_NOT_ASSUMED\n" as *u8)
20 var exact_keys:i64=0;k=0;while k<scene.curve_count{let curve:*FbxAffineCurve=af_curve(scene,k);var j:i64=0;while j<curve.count{let ticks:i64=fbxc_i64le(curve.times,j*8);if af_sample(curve,ticks)!=vm_f32_to_int(fbxc_u32(curve.values,j*4),FBB_Q){return 6};exact_keys=exact_keys+1;j=j+1};k=k+1}
21 if exact_keys!=4893{return 7}
22 let ids:*i64=sys_mmap(64) as *i64
23 ids[0]=344107585;ids[1]=991253731;ids[2]=213878811;ids[3]=739546166;ids[4]=990627664;ids[5]=58492909;ids[6]=384732476;ids[7]=858048952
24 var frame:i64=0
25 while frame<3{let ticks:i64=frame*28866348750
26 if af_evaluate(scene,ticks,1,out,scene.count*16)!=0{return 8}
27 k=0;while k<8{let index:i64=af_find(scene,ids[k]);if index<0{return 9};nb_text("MATRIX tick=" as *u8);nb_num(ticks);nb_text(" model=" as *u8);nb_num(ids[k]);nb_text(" q20=" as *u8);var j:i64=0;while j<16{if j>0{nb_text("," as *u8)};nb_num(out[index*16+j]);j=j+1};nb_text("\n" as *u8);k=k+1};frame=frame+1
28 }
29 // Refusal controls use the parsed private scene, never original FBX bytes.
30 let first:*FbxAffineModel=af_model(scene,0);let saved:i64=first.parent;first.parent=0
31 out[0]=717;if af_evaluate(scene,0,1,out,scene.count*16)!=FC_AMBIGUOUS||out[0]!=717{return 10};first.parent=saved
32 if af_evaluate(scene,0-1,1,out,scene.count*16)!=AF_TIMING{return 11}
33 if af_evaluate(scene,0,1,out,scene.count*16-1)!=AF_CAPACITY{return 12}
34 k=0;while k<bytes{if original[k]!=input[k]{return 13};k=k+1}
35 nb_text("PASS all4893 original key times; cycle/time/output-capacity refusal; original bytes unchanged\nAFFINE evaluation=PRIVATE_NUMERICAL_QUALIFICATION bind_correspondence=PENDING animation_artifact=NONE playback=UNQUALIFIED\n" as *u8)
36 return 0
37}