1

2つの3DベクトルAとBが与えられた場合、AからBに回転する回転行列を導出する必要があります。

これは私が思いついたものです:

  1. acosからコサインを導出する(A。B)
  2. asinから正弦波を導出する(| A x B | /(| A | * | B |))
  3. 回転軸としてAxBを使用します
  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

おそらく考えというよりタイプミスですが、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 に答える