D3DXVec3Hermite 関数

D3DXVec3Hermite 関数

指定された 3D ベクトルを使用して、エルミートのスプライン補間を実行する。

構文

D3DXVECTOR3 *WINAPI D3DXVec3Hermite(      
    D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *pV1,
    CONST D3DXVECTOR3 *pT1,
    CONST D3DXVECTOR3 *pV2,
    CONST D3DXVECTOR3 *pT2,
    FLOAT s
);

パラメータ

  • pOut
    [in, out] 演算結果である D3DXVECTOR3 構造体へのポインタ。
  • pV1
    [in] 位置ベクトルを示す、処理の基になる D3DXVECTOR3 構造体へのポインタ。
  • pT1
    [in] 接線ベクトルを示す、処理の基になる D3DXVECTOR3 構造体へのポインタ。
  • pV2
    [in] 位置ベクトルを示す、処理の基になる D3DXVECTOR3 構造体へのポインタ。
  • pT2
    [in] 接線ベクトルを示す、処理の基になる D3DXVECTOR3 構造体へのポインタ。
  • s
    [in] 加重係数。「注意」を参照すること。

戻り値

エルミートのスプライン補間の結果である D3DXVECTOR3 構造体へのポインタ。

注意

D3DXVec3Hermite 関数は、エルミートのスプライン補間を使って (positionA, tangentA) から (positionB, tangentB) へ補間する。

スプライン補間は、イーズイン、イーズアウト スプラインの一般化である。曲線は、次のプロパティを持つ関数 Q(s) である。

Q(s) = As3 + Bs2 + Cs + D (and therefore, Q'(s) = 3As2 + 2Bs + C) 

a) Q(0) = v1, so Q'(0) = t1
b) Q(1) = v2, so Q'(1) = t2

v1 は pV1 のコンテンツ、v2 は pV2 のコンテンツ、t1 は pT1 のコンテンツ、および t2 は pT2 のコンテンツである。

これらのプロパティは、A、B、C、D の解決に使われる。

D = v1  (from a)
C = t1  (from a)
3A + 2B = t2 - t-1 (substituting for C)
A + B = v2 - v1 - t1 (substituting for C and D)

A、B、C、D の結果をプラグインして Q(s) を生成する。

A = 2v1 - 2v2 + t2 + t1 
B = 3v2 - 3v1 - 2t1 - t2
C = t1 
D = v1

これによって次が得られる。

Q(s) = (2v1 - 2v2 + t2 + t1)s3 + (3v2 - 3v1 - 2t1 - t2)s2 + t1s + v1.

// Which can be rearranged as:

Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2.

カーブはすべての制御点を通って実行されるので、エルミートのスプラインはアニメーションの制御に便利である。また、位置や接線が各セグメントの終点で明示的に指定されているので、起点と接線が最終セグメントの終点の値に一致するようにしている限り、C2 連続カーブを簡単に作成できる。

この関数の戻り値は、pOut パラメータの戻り値と同じである。したがって、D3DXVec3Hermite 関数を別の関数の引数として使える。

関数の情報

ヘッダー d3dx9math.h
インポート ライブラリ d3dx9.lib
最低限のオペレーティング システム Windows 98