我正在为Three.js编写基本编辑器。我希望能够旋转,移动和缩放对象。
使用基本功能可以正常工作,但有时会有点混乱。
cube.rotation.z = Math.PI * val;
cube.rotation.x = Math.PI * val;
cube.position.z = val * -1;
cube.scale.y = val;
我想要做的是沿一个方向而不是一个轴并从相机的角度旋转对象。
这是一个说明这一点的代码。 https://codepen.io/arpo/pen/LxyoRJ
只要其他输入不受影响,它就可以正常工作。 如果你拖动范围"向左旋转"它在z轴上旋转立方体。但是如果你拖动范围"旋转后面"一路向右,然后拖动'#34;向左旋转"再次,旋转看起来像在Y轴上。其他输入也是如此。
我明白为什么会发生这种情况,但我不知道如何获得理想的效果。我也希望这可以从相机的角度来看。因此,如果您将相机向左移动并拖动范围"向后移动"立方体应该移开或靠近。
所以我想要的是当你使用左/右旋转范围旋转立方体时,我希望它从用户的角度向左或向右摆动。如果您使用移开范围,我希望将立方体推离用户。
答案 0 :(得分:2)
您的问题的答案至少需要基本了解3D中的坐标系如何工作。您需要了解三个坐标系:
这三个坐标系未对齐。好吧,默认情况下它们是对齐的,但在旋转对象或相机后却没有对齐。
当您通过rotation
属性旋转对象时,您将围绕其局部轴旋转它。您的立方体的Z轴与世界Z轴相同。将其描绘为从其正面突出的线与全局红线对齐。然后将立方体旋转90度,然后再回到前面。它的Z轴现在朝下。
当然,你从左到右'旋转 - 实际上是Z轴旋转 - 现在围绕这个朝下的Z轴旋转立方体。
为了围绕与摄像机坐标系对齐的轴旋转立方体,您必须执行多次旋转和平移变换。
我建议稍微学习一下3D的坐标系,模型转换,视图转换和相关基础知识。否则一切都会让人感到困惑。