Microsoft DirectX 8.0 (C++) |
Microsoft® Direct3D® では、頂点によって位置と向きが表される。プリミティブの各頂点は、位置を示すベクトル、色、テクスチャ座標、および向きを示す法線ベクトルによって記述される。
クオータニオンは、3 コンポーネント ベクトルを定義する [x, y, z] 値に第 4 の要素を追加する。クオータニオンは、3D 回転で一般的に使用される行列メソッドに代わるものである。クオータニオンは、3D 空間内の軸と、その軸を中心とする回転を表す。たとえば、1 つのクオータニオンで軸 (1,1,2) と 1 ラジアンの回転を表すことができる。クオータニオンは重要な情報も伝えるが、その真価は、クオータニオン上で実行できる 2 つの処理、合成と補間で発揮される。
クオータニオンの合成は、結合処理に類似する。2 つのクオータニオンの合成は、以下のように説明することができる。
1 つのジオメトリに対する 2 つのクオータニオンの合成とは、"ジオメトリを axis2 を中心に rotation2 だけ回転した後に、axis1 を中心に rotation1 だけ回転する" ことである。この場合 Q は、ジオメトリに q2 を適用した後に q1 を適用した結果生成された単一軸を中心とする回転を表す。
クオータニオンの補間を使用すれば、アプリケーションはある軸と向きから別の軸と方向までの滑らかで適切なパスを計算することができる。したがって、q1 から q2 の間を補間すれば、ある向きから別の向きへ簡単にアニメーションすることができる。
合成と補間を組み合わせると、ジオメトリの一見複雑そうな操作を簡単に実行できる。たとえば、一定の向きに回転させたいジオメトリがあるとする。axis2 を中心に r2° だけ回転した後に、axis1 を中心に r1° だけ回転することはわかっているが、最終的なクオータニオンはわからないとする。この場合、合成によってジオメトリ上の 2 つの回転を結合すれば、その結果として、単一のクオータニオンが生成される。そして、元のクオータニオンと合成されたクオータニオンの間を補間し、クオータニオンからクオータニオンへ滑らかなトランジションを実現できる。
Direct3DX ユーティリティ ライブラリには、クオータニオンの操作に役立つ関数がある。たとえば、D3DXQuaternionRotationAxis 関数は、回転の軸を定義するベクトルに回転値を加算し、その結果を D3DXQUATERNION 構造体によって定義されるクオータニオンに返す。さらに、D3DXQuaternionMultiply 関数はクオータニオンを合成し、D3DXQuaternionSlerp は 2 つのクオータニオン間で球状上で線形補間を実行する。
Direct3D アプリケーションでは、以下の関数を使ってクオータニオンの操作を単純化することができる。
Direct3D アプリケーションでは、以下の関数を使って 3 コンポーネント ベクトルの操作を単純化することができる。
その他、Direct3DX ユーティリティ ライブラリの算術関数には、2 コンポーネント ベクトルや 4 コンポーネント ベクトルによる処理を単純化するための関数が、多数用意されている。