ベクトル、頂点、およびクオータニオン (Direct3D 9)
Direct3D では、頂点は位置と方向を表します。プリミティブの各頂点は、位置、色、テクスチャー座標を決定するベクトル、およびその方向を決定する法線ベクトルによって示されます。
クオータニオンは、ベクトルを定義する 3 要素の [x, y, z] の 3 つの値に、4 番目の要素を追加したものです。クオータニオンは、通常は 3D 回転に使用される行列メソッドの代替として使用されます。クオータニオンは、3D 空間内の軸と、その軸の周りの回転を表します。たとえば、クオータニオンは (1,1,2) の軸と、1 ラジアンの回転を表します。クオータニオンは、役立つ情報を伝達しますが、真の価値はクオータニオンに実行できる合成と補間の 2 つの操作にあります。
クオータニオンの合成は、結合と似ています。2 つのクオータニオンの合成は次のようになります。
ジオメトリに適用される 2 つのクオータニオンの合成とは、「ジオメトリが軸 2 を 2 回転し、次に軸 1 の周りを 1 回転すること」を意味します。この場合、Q は 1 つの軸の周りの回転を示しており、その結果として q2 が、次に q1 がジオメトリに適用されます。
クオータニオンの補間を使用して、アプリケーションは 1 つの軸と方向から別の軸と方向へのスムーズで合理的なパスを計算します。そのため、q1 と q2 の間の補間は、1 つの方向から別の方向へと動かす簡潔な方法を提供します。
合成と補間を一緒に使用することで、一見複雑そうですが、実際にはジオメトリを操作する簡単な方法が提供されます。たとえば、指定された方向に回転するジオメトリがあるとします。この場合、軸 2 の周りを r2°回転し、次に軸 1 の周りを r1°回転することはわかりますが、最終的なクオータニオンはわかりません。合成を使用した場合は、ジオメトリで 2 つの回転を結合し、その結果として 1 つのクオータニオンを取得できます。さらに、オリジナルから合成されたクオータニオンを補間して、別のものへとスムーズな移行を達成できます。
D3DX ユーティリティ ライブラリには、クオータニオンと一緒に操作できる関数が含まれています。たとえば、D3DXQuaternionRotationAxis 関数は回転値を回転の軸を定義するベクトルに追加し、D3DXQUATERNION 構造体によって定義されているクオータニオンで結果を返します。また、D3DXQuaternionMultiply 関数はクオータニオンを構成し、D3DXQuaternionSlerp は 2 つのクオータニオンの間で球状線形補間を実行します。
Direct3D アプリケーションは、次の関数を使用してクオータニオンでの作業を簡単にします。
- D3DXQuaternionBaryCentric
- D3DXQuaternionConjugate
- D3DXQuaternionDot
- D3DXQuaternionExp
- D3DXQuaternionIdentity
- D3DXQuaternionInverse
- D3DXQuaternionIsIdentity
- D3DXQuaternionLength
- D3DXQuaternionLengthSq
- D3DXQuaternionLn
- D3DXQuaternionMultiply
- D3DXQuaternionNormalize
- D3DXQuaternionRotationAxis
- D3DXQuaternionRotationMatrix
- D3DXQuaternionRotationYawPitchRoll
- D3DXQuaternionSlerp
- D3DXQuaternionSquad
- D3DXQuaternionToAxisAngle
Direct3D アプリケーションは、次の関数を使用して、3 要素のベクトルでの作業を簡単にします。
- D3DXVec3Add
- D3DXVec3BaryCentric
- D3DXVec3CatmullRom
- D3DXVec3Cross
- D3DXVec3Dot
- D3DXVec3Hermite
- D3DXVec3Length
- D3DXVec3LengthSq
- D3DXVec3Lerp
- D3DXVec3Maximize
- D3DXVec3Minimize
- D3DXVec3Normalize
- D3DXVec3Project
- D3DXVec3Scale
- D3DXVec3Subtract
- D3DXVec3Transform
- D3DXVec3TransformCoord
- D3DXVec3TransformNormal
- D3DXVec3Unproject
2 要素および 4 要素のベクトルを使用して作業を簡単にする多くの関数が、D3DX ユーティリティ ライブラリの 算術関数 に含まれています。