D3DXQuaternionSquadSetup 関数
D3DXQuaternionSquadSetup 関数
球面二次補間の制御ポイントを設定する。
構文
void D3DXQuaternionSquadSetup(
D3DXQUATERNION *pAOut,
D3DXQUATERNION *pBOut,
D3DXQUATERNION *pCOut,
const D3DXQUATERNION *pQ0,
const D3DXQUATERNION *pQ1,
const D3DXQUATERNION *pQ2,
const D3DXQUATERNION *pQ3
);
パラメータ
- pAOut
[out] AOut へのポインタ。 - pBOut
[out] BOut へのポインタ。 - pCOut
[out] COut へのポインタ。 - pQ0
[in] 入力制御ポイント Q0 へのポインタ。 - pQ1
[in] 入力制御ポイント Q1 へのポインタ。 - pQ2
[in] 入力制御ポイント Q2 へのポインタ。 - pQ3
[in] 入力制御ポイント Q3 へのポインタ。
戻り値
注意
この関数は、入力 pQ0、pQ1、pQ2、および pQ3 に指定される 4 つの制御ポイントを取る。その後これらの値を変更して、最短のパスを通るカーブを見つける。q0、q2、および q3 の値は、次のように計算される。
q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ?-Q3 :Q3
新しい Q 値を計算したら、次のようにして AOut、BOut、および COut が計算される。
AOut = q1 * e[-0.25 *( Ln[Exp(q1)*q2] + Ln[Exp(q1)*q0] ) ]
BOut = q2 * e[-0.25 *( Ln[Exp(q2)*q3] + Ln[Exp(q2)*q1] ) ]
COut = q2
注 Ln はアプリケーション プログラミング インターフェイス (API) のメソッド D3DXQuaternionLn で、Exp は API のメソッド D3DXQuaternionExp である。
例
次に、クォータニオン キーのセット (Q0、Q1、Q2、Q3) を使って内部平方ポイント (A、B、C) を計算する例を示す。これにより、隣接するセグメントをまたいで接線が連続する。
A B
Q0 Q1 Q2 Q3
このようにして Q1 とQ2 の間を補間する。
// Rotation about the z-axis
D3DXQUATERNION Q0 = D3DXQUATERNION(0, 0, 0.707f, -.707f);
D3DXQUATERNION Q1 = D3DXQUATERNION(0, 0, 0.000f, 1.000f);
D3DXQUATERNION Q2 = D3DXQUATERNION(0, 0, 0.707f, 0.707f);
D3DXQUATERNION Q3 = D3DXQUATERNION(0, 0, 1.000f, 0.000f);
D3DXQUATERNION A, B, C, Qt;
FLOAT time = 0.5f;
D3DXQuaternionSquadSetup(&A, &B, &C, &Q0, &Q1, &Q2, &Q3);
D3DXQuaternionSquad(&Qt, &Q1, &A, &B, &C, time);
注 :
- C は、関数の結果によって + または - の Q2 となる。
- Qt は関数の結果である。
結果は、z 軸の周りで time = 0.5 で 45 度回転したものになる。
関数の情報
ヘッダー | d3dx9math.h |
インポート ライブラリ | d3dx9.lib |
最低限のオペレーティング システム | Windows 98 |
参照