【发布时间】:2014-03-13 13:54:55
【问题描述】:
我正在开发我的第一个 libgdx 3D 游戏。到目前为止,我可以在迷宫般的(硬编码)世界中移动,碰撞检测有效。我也有一些工作 A* 寻路的敌人。
我还加载了我的第一个(非常丑陋的)Blender 模型,使用FBX-Conv 获取.g3db 文件。出于某种原因,该模型躺在地板上而不是站立。当我将它导出为.fbx 时,我可能有一些错误的设置。
为此,我尝试通过以下方式将rotate() 环绕z-Axis 90 度数:
modelInstance.transform.rotate(Vector3.Z, 90) 在我的Screen 的show() 方法中,在加载Model 并实例化我的ModelInstance(在给定位置)之后。由于某种原因,它没有旋转。然后我将rotate 方法放在render(delta) 中,认为它现在每个渲染循环都会旋转90 度。但相反,它静止不动,就像它应该的那样。
好的,但现在我想要 modelInstance 到 rotate 到它实际看起来的位置,这意味着它应该旋转,这取决于我的 enemies Vector3 direction。
我已经用modelInstance.transform.setTotranslation(enemie.getPosition()) 设置他的位置,效果很好。所以我想我也可以使用modelInstance.transform.setToRotation(Vector3 v1, Vector3 vs)、v1 = enemie.getPosition() 和v2 = enemie.getPosition().add(enemie.getDirection)。请注意,position 向量不直接使用,因为它会在add() 方法中更改其值。
这样做,我再也看不到对象了,这也意味着它的位置是错误的。
为什么会这样?
以及如何使用direction 向量旋转我的modelInstance?
非常感谢。
【问题讨论】:
-
Matrix4#rotate 会旋转(后乘)矩阵。因此,您可能希望包含一些代码来显示问题。您可能还想在 X 轴(不是 Z 轴)上旋转 -90 度,或者最好在建模应用程序中检查导出到 FBX 设置,另请参阅:github.com/libgdx/libgdx/wiki/… 使用 Matrix4#setToRotation(Vector3, Vector3) 或旋转(Vector3, Vector3) 使用一个方向旋转,其中一个向量是方向,另一个是模型的面侧(例如 Vector3.Z)。
-
@Xoppa 好的,再次感谢我将尝试使用 2
Vecotr3s。我想我误解了它们,因为我想,一个Vector3是对象位置,一个是目标位置(pos.add(direction))。如果它不起作用,我将发布代码。谢谢 -
@Xoppa 我认为它现在可以工作了。我没有看到,
Matrix4.setToTranslation()不仅设置了ModelInstance的position,而且还首先将其设置为单位矩阵。目前我的ModelInstances只看前、后、左、右,所以我不确定它是否真的有效,但我认为它确实有效。我很快就会再做一次测试。谢谢
标签: java matrix 3d rotation libgdx