从模型文件对象定义中,新对象的放置由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" );
我对这些旋转矩阵和欧拉旋转还不是很好......