为了账号安全,请及时绑定邮箱和手机立即绑定

在 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 关注
  • 52 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信