1

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

这就是我想出的:

  1. 从acos (A . B)导出余弦
  2. 从asin导出正弦(|A x B| / (|A| * |B|))
  3. 使用 A x B 作为旋转轴
  4. 使用本页底部附近给出的矩阵(轴角)

除了 0°(我忽略)和 180°(我将其视为特殊情况)的旋转之外,这工作正常。使用 Direct3D 库是否有更优雅的方法来执行此操作?我正在寻找 Direct3D 特定的答案。

编辑:删除了 acos 和 asin(参见Hugh Allen 的帖子

4

4 回答 4

2

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

于 2008-11-13T05:04:49.793 回答
1

这可能更像是一个错字而不是 thinko,但 acos(AB) 是角度,而不是余弦。对于第 2 点也是如此。

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

于 2008-11-13T05:05:04.643 回答
1

您可能会从 siggraph链接文本中查看以下文章

于 2008-11-13T05:20:04.847 回答
0

也许你可以使用 D3DXMatrixLookAtLH ?

于 2009-11-17T12:02:39.567 回答