Babylonjs 如何将mesh.locallyTranslate Vector3运动转换为世界空间运动,为对象提供动量?
我设置了以下场景,可以使用以下键进行旋转:Babylonjs 如何将mesh.locallyTranslate Vector3运动转换为世界空间运动,为对象提供动量?,babylonjs,Babylonjs,我设置了以下场景,可以使用以下键进行旋转: i=俯仰 k=向上俯仰 j=向左滚动 l=向右滚动 u=向左偏航 o=向右偏航 /=取消所有旋转 并使用以下键移动: q=向前移动 a=向后移动 左扫射 f=右扫射 e=向上移动 d=向下移动 \=取消所有移动 在指向的方向上移动网格效果很好,但我希望根据网格的旋转来启动运动,但随后继续在原始方向上移动,而不考虑在启动运动后网格旋转的变化(保持动量) 我通过一个具有x、y和z值的单独对象在每个方向上跟踪运动,这样每次按下运动键盘都只会修改该对象
- i=俯仰
- k=向上俯仰
- j=向左滚动
- l=向右滚动
- u=向左偏航
- o=向右偏航
- /=取消所有旋转
- q=向前移动
- a=向后移动
- 左扫射
- f=右扫射
- e=向上移动
- d=向下移动
- \=取消所有移动
提前感谢您的帮助。通过Unity engine和三个.js解决方案的组合,我自己找到了一个解决类似问题的解决方案,然后浏览了Babylon.js github页面。为了修复它,我必须将全局跟踪的速度对象从基于按键的直接输入更改为计算的BABYLON。矢量3基于网格的世界矩阵和局部空间方向的归一化矢量3,我想移动网格,然后将其添加到用于跟踪动量的现有全局矢量3中(然后使用世界空间平移将其应用于网格 原件:
var direction = new BABYLON.Vector3.Zero(); // global
...
// on keypress of 'q' key apply thrust along 'z' axis
if (map["q"]) { // forward thrust
direction.z += 0.001;
};
...
// apply translation to mesh
mesh.locallyTranslate(new BABYLON.Vector3(x, y, z));
固定的:
var velocity = new BABYLON.Vector3.Zero(); // global
...
// on keypress of 'q' key apply thrust along 'z' axis using mesh world matrix to convert to world space vector
if (map["q"]) { // forward thrust
var matrix = mesh.getWorldMatrix();
var vector = new BABYLON.Vector3.Zero();
vector = BABYLON.Vector3.TransformNormal(new BABYLON.Vector3(0, 0, 1), matrix);
velocity.addInPlace(vector);
};
...
// apply translation to mesh
mesh.translate(velocity, 0.001, BABYLON.Space.WORLD);
现在“速度”物体保持动量,物体可以自由旋转,并根据其旋转和推力方向对“速度”物体进行附加更改
示例代码: