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}