我正在寻找在THREE.js中查找两个定义向量之间旋转矩阵的方法。
例如
v1 = new THREE.Vector3(1, 1, 1)
v2 = new THREE.Vector3(1, 1, -1)
我需要这个旋转矩阵来在下一步旋转整个对象。
我正在寻找在THREE.js中查找两个定义向量之间旋转矩阵的方法。
例如
v1 = new THREE.Vector3(1, 1, 1)
v2 = new THREE.Vector3(1, 1, -1)
我需要这个旋转矩阵来在下一步旋转整个对象。
v1
和v2
来定义旋转,如下所示:var quaternion = new THREE.Quaternion(); // create one and reuse it
quaternion.setFromUnitVectors( v1, v2 );
在您的情况下,您需要先对向量进行归一化处理。
然后,您可以使用以下模式将该旋转应用于对象:
var matrix = new THREE.Matrix4(); // create one and reuse it
matrix.makeRotationFromQuaternion( quaternion );
object.applyMatrix4( matrix );
另外,如果您不需要矩阵,可以直接应用四元数:
object.applyQuaternion( quaternion );
three.js r.152
axis.cross( v1, v2 ); angle = v1.angleTo( v2 ); matrix.makeRotationAxis( axis, angle ); object.applyMatrix( matrix );
。 - WestLangleydouble V1[3],V2[3]; // input
double X[3],Y[3],Z[3],P[3]; // output
double m[16]; // OpenGL like transform matrix
X = V1;
Z = V1 x V2;
Y = X x Z;
X/=|X|;
Y/=|Y|;
Z/=|Z|;
P = (0,0,0);
m[ 0]=X[0];
m[ 1]=X[1];
m[ 2]=X[2];
m[ 3]=0;
m[ 4]=Y[0];
m[ 5]=Y[1];
m[ 6]=Y[2];
m[ 7]=0;
m[ 8]=Z[0];
m[ 9]=Z[1];
m[10]=Z[2];
m[11]=0;
m[12]=P[0];
m[13]=P[1];
m[14]=P[2];
m[15]=1;
double angle = acos( (V1.v2)/(|V1|.|V2|) )