code wiki / (root) / nx_hairdyn_pose_candidate_t263.nx

nx_hairdyn_pose_candidate_t263.nx source

↩ module page · 25 lines · 1126 B

1// Candidate addition to nx_hairdyn_lib. Caller supplies posed rest geometry in 2// the same Q8 frame as state and capsules. This preserves authored curvature; 3// it does not claim anatomical proxy accuracy, inextensibility or strand width. 4import "nx_softdyn.nx" 5import "nx_vecmath.nx" 6func hd_tick_posed_collide(st:*i64,nseg:i64,posed:*i64,K:i64,C:i64,maxd:i64,caps:*i64,ncap:i64,scratch:*i64)->i64 { 7 var ax:i64=posed[0]; var ay:i64=posed[1]; var az:i64=posed[2] 8 var i:i64=0; var resolved:i64=0 9 while i<nseg { 10 let b:i64=i*SD_STRIDE 11 let r:i64=i*3 12 sd_step_axq(st,i,ax+posed[r+3]-posed[r],ay+posed[r+4]-posed[r+1],az+posed[r+5]-posed[r+2],K,K,K,K,C,C,C,C,maxd) 13 var ci:i64=0 14 while ci<ncap { 15 let o:i64=ci*7 16 if vm_capsule_push(st[b],st[b+1],st[b+2],caps[o],caps[o+1],caps[o+2],caps[o+3],caps[o+4],caps[o+5],caps[o+6],scratch)==1 { 17 st[b]=scratch[0];st[b+1]=scratch[1];st[b+2]=scratch[2] 18 resolved=resolved+1 19 } 20 ci=ci+1 21 } 22 ax=st[b];ay=st[b+1];az=st[b+2];i=i+1 23 } 24 return resolved 25}