基于摄像机旋转的弹丸旋转

时间:2013-03-04 14:02:43

标签: math rotation three.js quaternions

我一直在使用three.js和flightcontrols.js(一个附带three.js的示例)进行一个小空间模拟器演示。

该演示可在 - http://www.zacharycarter.com/PrivateerRedux/demo.html

查看

控制方案非常简单 - 鼠标控制相机,你左键点击发射射弹。

我在如何产生我的射弹方面遇到了一些麻烦。目前我正在将它们的旋转设置为相机的相同旋转,我认为这是导致我的问题的原因。

你会注意到,当你围绕游戏世界旋转相机并继续发射射弹时,射弹的位置和方向很快就变得很糟糕。

我正在使用四元数来表示我的相机的旋转,但是在设置我的投射器旋转以匹配相机的旋转之前,我还从四元数中消除了欧拉角。

关于我在这里做错了什么的想法?我有一种感觉,我需要从我的相机旋转中找出一个不变的前向旋转,但我不太确定该怎么做。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,我认为你的问题是你正在应用世界变换和局部变换(即在世界空间中旋转以使子弹在正确的方向上飞行以及子弹的局部轴周围的子弹旋转) 。似乎它们都被应用在同一个空间中。

然而,我不会写一个全新的例子,而是将它留给旧的,可信赖的互联网,使用太阳系的常见例子向我们提供有关该问题的一些指导。

这可能会启发你:

http://docs.techsoft3d.com/visualize/3df/latest/Hoops3DGS/prog_guide/03_3_viewing_modelling_matrices.html (见图3.3.2.b)

...这是一个展示同样事物的OpenGL示例:

http://www.codemiles.com/c-opengl-examples/solar-system-transformations-t7292.html

无论如何都有理论,希望有所帮助!