四元数用于指定旋转。您首先需要指定不应用旋转时的方向。例如,如果您想在未应用旋转时沿 X 轴移动:
Vector3 baseDirection = new Vector3(1,0,0);
确保基准方向是规范化的(长度=1),可以使用nor()方法来保证安全:
Vector3 baseDirection = new Vector3(1,0,0).nor();
接下来您需要使用四元数旋转方向:
Vector3 direction = new Vector3();
Quaternion rotation = your_quaternion;
direction.set(baseDirection);
direction.mul(rotation);
现在你有了方向,你可以用你想移动的量来缩放它。您可能希望每帧都执行此操作,具体取决于自上一帧以来经过的时间。
final float speed = 5f; // 5 units per second
Vector3 translation = new Vector3();
translation.set(direction);
translation.scl(speed * Gdx.graphics.getDeltaTime());
最后你需要将翻译添加到位置
position.add(translation);
当然,根据您的实际实现,您可以批处理多个操作,例如:
translation.set(baseDirection).mul(rotation).scl(speed * Gdx.graphics.getDeltaTime());
position.add(translation);
更新:
从 Xoppa 的评论中添加工作代码:
translation.set(baseDirection).rot(modelInstance.transform).nor().scl(speed * delta)