我尝试使用
旋转围绕Worlds-Y轴的对象 myObject.rotateOnWorldAxis(new THREE.Vector3(0,1,0),THREE.Math.degToRad(1));
但是结果是,对象仅在对象空间中旋转。
为确保使用正确的方法,我查看了documentation,发现有三种方法可以旋转对象:
.RotateY(rad)
//在本地空间中旋转
.rotateOnAxis(axis,rad)
//在对象空间中旋转
.rotateOnWorldAxis(axis,rad)
//世界空间中的旋转
似乎我使用了正确的方法。
这是我的错误还是理解上的问题?
这是一个JSFiddle,它说明了我的问题(蓝色立方体应绕世界轴旋转)。
这是第二个Fiddle,其中您的青色立方体是另一个对象的子代。
答案 0 :(得分:1)
在我看来,您真正的问题不是关于世界空间或对象空间的旋转,因为它们在您的示例中按预期工作。
您可能是说,如何更改对象的旋转点。如果是这种情况,则有两个选择,您可以translate相对于旋转枢轴点的所有几何顶点。这样,您的枢轴将以(0,0,0)为中心,并且顶点将相对于该点旋转。
mesh.geometry.translate( x, y, z );
或者,您可以使对象成为其他Object3D
(枢轴)的子对象,将原始网格的位置与上述相同,然后旋转枢轴网格。
var cube = new THREE.Mesh( geometry, material );
var pivot = new THREE.Object3D();
cube.position.set( 0, 12, 30 ); // offset from center
pivot.add( cube );
scene.add( pivot );
//...
pivot.rotation.y += Math.PI/2;