【问题标题】:Projectile rotation based on camera rotation基于相机旋转的弹丸旋转
【发布时间】:2013-03-04 14:02:42
【问题描述】:

我一直在使用three.js 和flightcontrols.js(三个.js 附带的示例)制作一个小型空间模拟器演示

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

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

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

您会注意到,当您在游戏世界中旋转相机并继续发射弹丸时,弹丸的位置和方向很快就会变得古怪。

我使用四元数来表示我的相机的旋转,但在设置我的射弹旋转以匹配我的相机之前,我还从四元数推导出欧拉角。

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

谢谢!

【问题讨论】:

  • 如果我没记错的话,“欧拉角”有大约 20 种不同的定义。你确定你使用的是正确的吗?我建议完全放弃欧拉角,只使用变换矩阵和/或四元数。
  • Three.js 内置了一个名为 setEulerFromQuaternion 的方法。这个方法在我正在使用的控件库中调用。我不确定底层实现是什么,但它仍然没有回答我的问题,即我在这里做错了什么,四元数与否......
  • 顺便说一句,我在 Windows 上使用 google chrome,演示不起作用。我在执行左键单击时看不到弹丸。
  • 请尝试向下移动鼠标,使相机视图向下旋转。应用首次加载时,弹丸刚刚不在视野范围内。
  • 我移动了发射弹的位置,以便在启动演示时清晰可见。此外,我还更新了弹丸旋转以使用四元数,但仍有一些问题......

标签: math rotation three.js quaternions


【解决方案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

反正有理论,希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多