亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 p5js 中使用速度和位置向量進行 3D 定向粒子

在 p5js 中使用速度和位置向量進行 3D 定向粒子

米脂 2023-11-12 22:12:49
我目前正在 P5.js 中編寫 boids 算法的 3D 實現,但我無法根據 boids 的方向(速度)來確定 boids 的方向。旋轉僅限于 RotateX()、RotateY() 和 RotateZ()。我認為應該有效的最簡單的解決方案是這樣的: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();但事實并非如此。我編寫了一個小得多的程序版本,其中僅包含隨機生成的沿單一方向運動的粒子的方向。非常感謝,我已經被這個問題困擾了半天了
查看完整描述

1 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

從您的演示中,z 分量被翻轉,您可以一次僅嘗試一次旋轉來測試這一點。其次,以這種方式鏈接 3D 旋轉通常不會達到您想要的效果,因為旋轉會更改附加到某個對象的坐標系的“向上”或“向右”向量。例如,繞向上(p5 為 -y)矢量或偏航角旋轉將旋轉右側矢量。然后,第二次旋轉需要圍繞旋轉的右向量(現在是俯仰),因此您不能只使用rotateX/Y/Z,因為它們仍然在世界空間而不是對象空間中。請注意,在此解決方案中我完全忽略了滾動,但如果您從正面和頂部角度觀察實體,它應該與速度對齊


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));


查看完整回答
反對 回復 2023-11-12
  • 1 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號