我目前正在 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));
添加回答
举报
0/150
提交
取消