绕世界轴旋转

时间:2019-06-03 11:07:44

标签: three.js

我尝试使用

旋转围绕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,其中您的青色立方体是另一个对象的子代。

1 个答案:

答案 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;

JSFiddle