0

从模型文件对象定义中,新对象的放置由location(空间中的一个点)和 X 轴、Y 轴和 Z 轴的标准化方向给出。

我怎样才能把它翻译成a THREE.Euler,这样我就可以在空间中正确旋转我的对象。

所以轴是关闭类型的THREE.Vector3。如果新对象与world值对齐,则为:

xAxis = new THREE.Vector3( 1, 0, 0 );

yAxis = new THREE.Vector3( 0, 1, 0 );

zAxis = new THREE.Vector3( 0, 0, 1 );

但是,例如,如果对象的整个局部 UCSMath.PI围绕 旋转 180 度(或 ),zAxis它们将如下所示:

xAxis = new THREE.Vector3( -1, 0, 0 );

yAxis = new THREE.Vector3( 0, -1, 0 );

zAxis = new THREE.Vector3( 0, 0, 1 );

所以我需要做这样的事情:

var object3D = new THREE.Object3D();

object3D.position = location;

var euler = new THREE.Euler();

euler.setFromNormalizedAxes( xAxis, yAxis, zAxis );

object3D.rotation = euler;

或者从这些轴创建一个旋转矩阵:

var rotationMatrix = new THREE.Matrix4();

rotationMatrix.setFromNormalizedAxes( xAxis, yAxis, zAxis );

object3D.rotation.setFromRotationMatrix( rotationMatrix, "XYZ" );

我对这些旋转矩阵和欧拉旋转还不是很好......

4

1 回答 1

3

在您给出的示例中,答案是

object.quaternion.setFromRotationMatrix(

    new THREE.Matrix4( -1,  0,  0,  0,
                        0, -1,  0,  0,
                        0,  0,  1,  0,
                        0,  0,  0,  1 )

);

上部 3x3 的列Matrix4是新的 x 轴、y 轴和 z 轴。

你可以object.rotation改为设置。不要紧。

三.js r.66

于 2014-04-10T16:05:24.713 回答