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

我目前正在 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();

但事实并非如此。


我编写了一个小得多的程序版本,其中仅包含随机生成的沿单一方向运动的粒子的方向。

非常感谢,我已经被这个问题困扰了半天了


米脂
浏览 106回答 1
1回答

慕姐8265434

从您的演示中,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));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript