次の方法で共有


D3DXVec4Hermite 関数 (D3dx9math.h)

Note

D3DX ユーティリティ ライブラリは非推奨です。 代わりに DirectXMath を使用することをお勧めします。

指定した 4D ベクトルを使用して、ヘルマイト スプライン補間を実行します。

構文

D3DXVECTOR4* D3DXVec4Hermite(
  _Inout_       D3DXVECTOR4 *pOut,
  _In_    const D3DXVECTOR4 *pV1,
  _In_    const D3DXVECTOR4 *pT1,
  _In_    const D3DXVECTOR4 *pV2,
  _In_    const D3DXVECTOR4 *pT2,
  _In_          FLOAT       s
);

パラメーター

pOut [in, out]

種類: D3DXVECTOR4*

操作の結果である D3DXVECTOR4 構造体へのポインター。

pV1 [in]

型: const D3DXVECTOR4*

ソース D3DXVECTOR4 構造体 (位置ベクトル) へのポインター。

pT1 [in]

型: const D3DXVECTOR4*

ソース D3DXVECTOR4 構造体 (タンジェント ベクトル) へのポインター。

pV2 [in]

型: const D3DXVECTOR4*

ソース D3DXVECTOR4 構造体 (位置ベクトル) へのポインター。

pT2 [in]

型: const D3DXVECTOR4*

ソース D3DXVECTOR4 構造体 (タンジェント ベクトル) へのポインター。

s [in]

型: FLOAT

重み付け係数。 「解説」を参照してください。

戻り値

種類: D3DXVECTOR4*

ヘルマイト スプライン補間の結果である D3DXVECTOR4 構造体へのポインター。

解説

D3DXVec4Hermite 関数は、ヘルマイト スプライン補間を使用して (positionA,tangentA) から (positionB, tangentB) に補間します。

スプライン補間は、イーズイン、イーズアウト スプラインの一般化です。 ランプは、次のプロパティを持つ Q の関数です。

Q(s) = As ² + Bs² + Cs + D (したがって、Q'(s) = 3As² + 2Bs + C)

a) Q(0) = v1 であるため、Q'(0) = t1

b) Q(1) = v2 であるため、Q'(1) = t2

v1 は pV1、v2 の内容は pV2、t1 は pT1 の内容、t2 は pT2 の内容です。

これらのプロパティは、A、B、C、D の解決に使用されます。

A、B、C、D のソリューションをプラグインして Q を生成します。

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

次が生成されます。

Q(s) = (2v1 - 2v2 + t2 + t1)s² + (3v2 - 3v1 - 2t1 - t2)s² + t1s + v1

次のように再配置できます。

Q(s) = (2s ² - 3s² + 1)v1 + (-2s ² + 3s²)v2 + (s ² - 2s² + s)t1 + (s ² - s²)t2

ハーマイト スプラインは、カーブがすべてのコントロール ポイントを通って実行されるため、アニメーションを制御する場合に便利です。 また、位置と接線は各セグメントの端で明示的に指定されるため、開始位置とタンジェントが最後のセグメントの終了値と一致していることを確認する限り、C2 連続曲線を簡単に作成できます。

この関数の戻り値は、pOut パラメーターで返される値と同じです。 このようにして、 D3DXVec4Hermite 関数を別の関数のパラメーターとして使用できます。

要件

要件
ヘッダー
D3dx9math.h
ライブラリ
D3dx9.lib

関連項目

数値演算関数