次の方法で共有


D3DXVec3CatmullRom 関数

D3DXVec3CatmullRom 関数

指定された 3D ベクトルを使用して、Catmull-Rom 補間を実行する。

構文

D3DXVECTOR3 *WINAPI D3DXVec3CatmullRom(      
    D3DXVECTOR3 *pOut,
    CONST D3DXVECTOR3 *pV1,
    CONST D3DXVECTOR3 *pV2,
    CONST D3DXVECTOR3 *pV3,
    CONST D3DXVECTOR3 *pV4,
    FLOAT s
);

パラメータ

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

戻り値

Catmull-Rom 補間の結果である D3DXVECTOR3 構造体へのポインタ。

注意

4 つの点 (p1、p2、p3、p4) を与えると、次のような関数 Q(s) を検索する。

Q(s) is a cubic function. 
Q(s) interpolates between p2 and p3 as s ranges from 0 to 1. 
Q(s) is parallel to the line joining p1 to p3 when s is 0. 
Q(s) is parallel to the line joining p2 to p4 when s is 1. 

Catmull-Rom スプラインは、次のように設定することで、エルミート スプラインから派生できる。

v1 = p2
v2 = p3
t1 = (p3 - p1) / 2
t2 = (p4 - p2) / 2

v1 は pV1 のコンテンツ、v2 は pV2 のコンテンツ、p3 は pV3 のコンテンツ、および p4 は pV4 のコンテンツである。

次のエルミート スプライン数式を使って

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

v1、v2、t1、t2 に代入すると、次の結果が得られる。

Q(s) = (2s3 - 3s2 + 1)p2 + (-2s3 + 3s2)p3 + (s3 - 2s2 + s) (p3 - p1)/2 
         + (s3 - s2)(p4 - p2)/2

これは、次のように置き換えられる。

Q(s) = [(-s3 + 2s2 - s)p1 + (3s3 - 5s2 + 2)p2 + 
         (-3s3 + 4s2 + s)p3 + (s3 - s2)p4] / 2

関数の情報

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

参照

D3DXVec2CatmullRomD3DXVec4CatmullRom