Direct3D几何:两个向量的旋转矩阵

时间:2008-11-13 04:41:58

标签: graphics 3d geometry transform direct3d

给定两个3D矢量A和B,我需要导出一个从A旋转到B的旋转矩阵。

这就是我提出的:

  1. acos (A.B)
  2. 导出余弦
  3. asin 中获取正弦(| A x B | /(| A | * | B |))
  4. 使用A x B作为旋转轴
  5. 使用this page底部附近的矩阵(轴角)
  6. 除了旋转0°(我忽略)和180°(我将其视为一种特殊情况)外,这种方法很好。使用Direct3D库有更优雅的方法吗?我正在寻找Direct3D的具体答案。

    编辑:删除了acos和asin(请参阅Hugh Allen's post

4 个答案:

答案 0 :(得分:2)

不,你几乎是以最好的方式做到这一点。我不认为有一个内置的DirectX功能可以满足您的需求。对于第4步,您可以使用D3DXMatrixRotationAxis()。请注意边缘情况,例如| A |时或| B |为零,或角度为0°或180°时。

答案 1 :(得分:1)

这可能更像是一个错字而不是思考,但acos(A.B)是角度,而不是它的余弦。同样,对于第2点。

你可以使用sin ^ 2 + cos ^ 2 = 1从cos计算sin。即sin = sqrt(1-cos * cos)。这比你正在使用的矢量表达式便宜,并且还消除了0/180度的特殊情况。

答案 2 :(得分:1)

您可以查看siggraph link text

中的以下文章

答案 3 :(得分:0)

也许你可以使用D3DXMatrixLookAtLH?