米脂
2023-11-12 22:12:49
我目前正在 P5.js 中編寫 boids 算法的 3D 實(shí)現(xiàn),但我無法根據(jù) boids 的方向(速度)來確定 boids 的方向。旋轉(zhuǎn)僅限于 RotateX()、RotateY() 和 RotateZ()。我認(rèn)為應(yīng)該有效的最簡單的解決方案是這樣的:push();translate(this.pos);?rotateZ(createVector(this.vel.x, this.vel.y).heading());rotateY(createVector(this.vel.x, this.vel.z).heading());beginShape();// Draw Boid Vertices..endShape();pop();但事實(shí)并非如此。我編寫了一個(gè)小得多的程序版本,其中僅包含隨機(jī)生成的沿單一方向運(yùn)動的粒子的方向。非常感謝,我已經(jīng)被這個(gè)問題困擾了半天了
1 回答

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
從您的演示中,z 分量被翻轉(zhuǎn),您可以一次僅嘗試一次旋轉(zhuǎn)來測試這一點(diǎn)。其次,以這種方式鏈接 3D 旋轉(zhuǎn)通常不會達(dá)到您想要的效果,因?yàn)樾D(zhuǎn)會更改附加到某個(gè)對象的坐標(biāo)系的“向上”或“向右”向量。例如,繞向上(p5 為 -y)矢量或偏航角旋轉(zhuǎn)將旋轉(zhuǎn)右側(cè)矢量。然后,第二次旋轉(zhuǎn)需要圍繞旋轉(zhuǎn)的右向量(現(xiàn)在是俯仰),因此您不能只使用rotateX/Y/Z,因?yàn)樗鼈內(nèi)匀辉谑澜缈臻g而不是對象空間中。請注意,在此解決方案中我完全忽略了滾動,但如果您從正面和頂部角度觀察實(shí)體,它應(yīng)該與速度對齊
var right = p5.Vector(this.vel.x, 0, this.vel.z);
rotate(atan(this.vel.y/ this.vel.x), right);
rotateY(atan2(-this.vel.z, this.vel.x));
添加回答
舉報(bào)
0/150
提交
取消