次の方法で共有


D3DXVec4Hermite

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

D3DXVECTOR4 * 
D3DXVec4Hermite(
  D3DXVECTOR4 * pOut,
  CONST D3DXVECTOR4 * pV1,
  CONST D3DXVECTOR4 * pT1,
  CONST D3DXVECTOR4 * pV2,
  CONST D3DXVECTOR4 * pT2,
  FLOAT s
);

パラメータ

  • pOut
    処理の結果を表わす D3DXVECTOR4 構造体へのポインター
  • pV1
    演算対象の位置ベクトルを表す D3DXVECTOR4 構造体へのポインターです。
  • pT1
    演算対象の接線ベクトルを表す D3DXVECTOR4 構造体へのポインターです。
  • pV2
    演算対象の位置ベクトルを表す D3DXVECTOR4 構造体へのポインターです。
  • pT2
    演算対象の接線ベクトルを表す D3DXVECTOR4 構造体へのポインターです。
  • s
    加重係数。「解説」を参照してください。

戻り値

エルミート スプライン補間の結果を表す D3DXVECTOR4 構造体へのポインターです。

解説 

D3DXVec4Hermite 関数は、エルミート スプライン補間を使用して (位置 A、接線 A) と (位置 B、接線 B) の間を補間します。

スプライン補間は、イーズイン、イーズアウト スプラインを一般化したものです。ランプは、次のプロパティを持つ関数 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 パラメーターに返される値と 同じです。このため、D3DXVec4Hermite 関数は他の関数のパラメーターとして使用できます。

要件

ヘッダー: D3dx9math.h 宣言

ライブラリ: D3dx9.lib 内容