4

我想设置飞机的旋转。这需要三个数字来表示 x、y 和 z 轴上的弧度旋转。

我没有这些数字,但是,我有一个向量“myVec”,一旦旋转,它就会与平面正交。

这个向量让我更近了一步,但并不完全:THREE.Vector3 提供了一个函数“setEulerFromRotationMatrix”。如果我能弄清楚如何从 myVec 生成旋转矩阵,也许我可以使用它:

旋转矩阵描述了一个向量如何转换为另一个向量。因此出现了一个问题:哪个向量应该是起始向量?这个(1,1,1),还是这个(1,0,0)?

其次,我如何实际制作矩阵?我看过http://en.wikipedia.org/wiki/Rotation_matrix,但只找到了如何从旋转矩阵转换为其他矩阵。它必须以某种方式反转矩阵乘法过程。

任何指针?

4

2 回答 2

5

在three.js r50中,默认平面位于原点,它的法线点在正z方向。所以它是( 0, 0, 1 )您要转换为的向量myVec。但你不必直接这样做。

在 three.js 中做你想做的最简单的方法就是这样。

var v = myPlane.position.clone();
v.add( myVec );
myPlane.lookAt( v );

让three.js 为您计算。:-)

编辑:更新到 three.js r.66

于 2012-09-08T13:27:10.020 回答
1

任何三维的旋转都可以用三个角度来表示。你的方法听起来像欧拉角,看看这里:http ://en.wikipedia.org/wiki/Euler_angles

当你想一次构建一个围绕 3 个角度旋转的旋转矩阵时,你必须首先构建 3 个矩阵,每个矩阵都围绕一个轴执行给定角度的旋转。然后您必须将 3 个矩阵相乘(以正确的顺序)以获得最终的旋转矩阵。

如果您知道如何旋转矢量 (1 0 0) 以匹配最终矢量,您只需要计算出围绕各个轴的角度。注意旋转的顺序。您也可以从任何其他向量开始。你只需要知道角度。

可以在此处找到围绕给定轴旋转给定角度的矩阵:http ://en.wikipedia.org/wiki/Rotation_matrix (请参阅“在三个维度中”下的“基本旋转”)。

在“一般旋转”下,您会找到我刚刚向您描述的方法(将 3 个矩阵相乘以获得整个旋转的一个矩阵)。

于 2012-09-08T12:05:59.590 回答