Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 基于对象在three.js中的旋转移动对象_Math_Three.js_Webgl - Fatal编程技术网

Math 基于对象在three.js中的旋转移动对象

Math 基于对象在three.js中的旋转移动对象,math,three.js,webgl,Math,Three.js,Webgl,我试图在three.js中根据立方体的旋转移动立方体,但不确定如何移动 现在我可以用A&D键旋转立方体的z轴。使用W键,我希望它相对于旋转向前移动 从2D开始,我会这样做: float angle = GradToRad(obj.rotation); obj.x = obj.x + cos(angle) * velocity; obj.y = obj.y + sin(angle) * velocity; 下面是当前实现的图像。 如何在three.js中应用类似的东西?在一个单独的(同质投影)

我试图在three.js中根据立方体的旋转移动立方体,但不确定如何移动

现在我可以用A&D键旋转立方体的z轴。使用W键,我希望它相对于旋转向前移动

从2D开始,我会这样做:

float angle = GradToRad(obj.rotation);
obj.x = obj.x + cos(angle) * velocity;
obj.y = obj.y + sin(angle) * velocity;
下面是当前实现的图像。


如何在three.js中应用类似的东西?

在一个单独的(同质投影)中表达旋转和平移可能是最简单的。three.js中的成员已经这样做了,不过您可能需要将
matrixAutoUpdate
设置为
false
才能直接使用它。然后,您可以使用“平移”方法在对象自身的参照系中移动对象。

可以将对象视为朝向其正Z轴。因此,要相对于对象自身的坐标系向前移动对象,可以使用

Object3D.translateZ( distance );

three.js r.57

您的2D方法正是我在three.js中使用的方法。对于Y位置,我使用了地形碰撞技术(这仍然需要工作)

用户直接在three.js中处理对象矩阵是非常不明智的。只有当你真的知道自己在做什么并且熟悉库的内部工作时,才可以这样做。是的,但是仅仅沿Z轴平移将不允许我的对象相对于其旋转移动。意思是当我转动物体时,我希望它沿着它的“面”移动。当它的旋转向量为(0,0,0)时,你的物体“面”是哪个方向?这是应用旋转后要移动的局部方向。我绕Z轴旋转。当旋转向量为(0,0,0)时,对象“面向”哪个方向?哦,天哪,我现在觉得很傻!翻译!与设置位置不同。。。我想这背后还有一些更高级的数学,但是的,好吧。是的,它是有效的:)谢谢你,朋友!