three.js:从平面正交向量到平面旋转矩阵

4
我想设置平面旋转,需要三个数字表示x、y和z轴的弧度旋转。
我没有这些数字,但是我有一个向量'myVec',一旦旋转后应该垂直于平面。
这个向量使我离目标更近了一步,但还不够:THREE.Vector3提供了一个函数“setEulerFromRotationMatrix”。如果我能弄清楚如何从myVec生成旋转矩阵,我可能可以使用它:
旋转矩阵描述了一个向量如何转换为另一个向量。因此出现了问题:哪个向量应该是起始向量?这个(1,1,1),还是这个(1,0,0)?
其次,我如何制作矩阵?我看过http://en.wikipedia.org/wiki/Rotation_matrix,但只找到了如何将旋转矩阵转换为其他内容。必须以某种方式反转矩阵乘法过程。
有什么提示吗?
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

2
太棒了!我的飞机从未如此垂直于它们应该垂直的物体。 - user134055

1

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

当你想要构建一个同时绕三个轴旋转的旋转矩阵时,你需要先构建三个矩阵,每个矩阵分别绕一个轴旋转一个给定的角度。然后你需要按正确的顺序将这三个矩阵相乘,以得到最终的旋转矩阵。

如果你知道如何将向量(1 0 0)旋转以匹配你的最终向量,那么你只需要找出各自轴线上的角度。注意旋转的顺序。你也可以从任何其他向量开始,只需要知道角度即可。

绕给定轴线旋转给定角度的矩阵可以在这里找到:http://en.wikipedia.org/wiki/Rotation_matrix(在“三维空间中的基本旋转”下面)。

在“三维空间中的一般旋转”下面,你会找到我刚刚向你描述的方法(将三个矩阵相乘以得到整个旋转的一个矩阵)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接