【问题标题】:three.js: from plane-orthogonal vector to plane rotation matrixthree.js:从平面正交向量到平面旋转矩阵
【发布时间】:2014-04-01 22:40:07
【问题描述】:

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

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

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

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

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

任何指针?

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    在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

    【讨论】:

    • 太棒了!我的飞机从未如此垂直于它们应该垂直的东西。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2023-03-28
      相关资源
      最近更新 更多