Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript three.js:从平面正交向量到平面旋转矩阵_Javascript_Three.js - Fatal编程技术网

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

Javascript three.js:从平面正交向量到平面旋转矩阵,javascript,three.js,Javascript,Three.js,我要设置平面的旋转。这需要三个数字表示x、y和z轴上的旋转弧度 我没有这些数字,但是,我有一个向量‘myVec’,一旦旋转,它将与平面正交 这个向量让我更接近了一步,但还没有完全达到:3.Vector3提供了一个函数“setEulerFromRotationMatrix”。如果我能想出如何从myVec生成旋转矩阵,也许我可以使用这个: 旋转矩阵描述了一个向量如何转换为另一个向量。因此出现了一个问题:哪个向量应该是起始向量?这个(1,1,1),还是这个(1,0,0) 第二,我实际上如何制作矩阵?我

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

我没有这些数字,但是,我有一个向量‘myVec’,一旦旋转,它将与平面正交

这个向量让我更接近了一步,但还没有完全达到:3.Vector3提供了一个函数“setEulerFromRotationMatrix”。如果我能想出如何从myVec生成旋转矩阵,也许我可以使用这个:

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

第二,我实际上如何制作矩阵?我已经看过了,但只发现了如何从旋转矩阵转换到其他矩阵。 这一定是以某种方式逆转了矩阵乘法过程


任何指针?

三维中的任何旋转都可以用三个角度表示。您的方法听起来像欧拉角,请看这里:

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

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

可以在这里找到一个围绕给定轴旋转给定角度的矩阵:(参见“三维”下的“基本旋转”)


在“常规旋转”下,您可以找到我刚才向您介绍的方法(将3个矩阵相乘,得到整个旋转的一个矩阵)。

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

在three.js中实现所需功能的最简单方法如下

var v = myPlane.position.clone();
v.add( myVec );
myPlane.lookAt( v );
让three.js为您计算一下。:-)


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

真棒!!我的平面从来没有像现在这样垂直于它们应该垂直的东西。