延續兩天前的話題,既然連unity都做過圓球表面運動了,那麼很久沒打開都快生鏽發霉的QC(quartz composer)當然也要來一下。QC的優點就是,跟所有的vj軟體配合度都相當高,內部還支援javascript寫作,所以本範例 登"登" ,只花了一個小時就實做出來(對比 unity,我只能嘆聲連連)。
var first=false; var x; var y; var z; var radius=0.5; var theta; var phi; var VelT; var VelP; var num; var bx1; var bx2; var by1; var by2; var bz1; var bz2; var mySphere=[]; var myLines=[]; function dis(x1,y1,z1,x2,y2,z2){ return Math.sqrt(Math.pow((x1-x2),2)+Math.pow((y1-y2),2)+Math.pow((z1-z2),2)); } function (__structure myStructures,__structure myStructures2,__number LinesNum) main (__number time,__number numball,__number limit) { var result = new Object(); myLines=[]; if(num != numball){ first=true; mySphere=[]; num= numball; } if(first==true){ for(var i=0;i<num;i++){ theta=(6.28*(Math.random())); phi=(6.28*(Math.random())); VelT=0.02*(Math.random())+0.01; VelP=0.02*(Math.random())+0.01; x=radius * Math.cos ((theta)) * Math.cos ((phi)); y=radius * Math.sin ((phi)); z=radius * Math.sin ((theta)) * Math.cos ((phi)); mySphere.push({ax:x,ay:y,az:z, atheta:theta,aphi:phi, avelt:VelT,avelp:VelP }); first=false; } } for(var i=0;i<mySphere.length;i++){ mySphere[i].atheta = mySphere[i].atheta + mySphere[i].avelt ; mySphere[i].aphi = mySphere[i].aphi + mySphere[i].avelp ; mySphere[i].ax = radius * Math.cos ((mySphere[i].atheta)) * Math.cos ((mySphere[i].aphi)); mySphere[i].ay = radius * Math.sin ((mySphere[i].aphi)); mySphere[i].az = radius * Math.sin ((mySphere[i].atheta)) * Math.cos ((mySphere[i].aphi)); } for (var i=0; i<mySphere.length; i++) { for (var j=i+1; j<mySphere.length; j++) { bx1=mySphere[i].ax; by1=mySphere[i].ay; bz1=mySphere[i].az; bx2=mySphere[j].ax; by2=mySphere[j].ay; bz2=mySphere[j].az; if(dis(bx1,by1,bz1,bx2,by2,bz2)<limit){ myLines.push({lx1:bx1,ly1:by1,lz1:bz1, lx2:bx2,ly2:by2,lz2:bz2 }); } } } result.myStructures=mySphere; result.myStructures2=myLines; result.LinesNum=myLines.length; return result; }
本支程式要轉成32位元開啟,然後還要加裝kineme的GL Line 套件。
Download
沒有留言:
張貼留言