次の方法で共有


D3DXPlaneTransform 関数

D3DXPlaneTransform 関数

行列を使って平面をトランスフォームする。入力行列は、実際のトランスフォームの逆転置行列である。

構文

D3DXPLANE *D3DXPlaneTransform(      
    D3DXPLANE *pOut,
    CONST D3DXPLANE *pP,
    CONST D3DXMATRIX *pM
);

パラメータ

  • pOut
    [in, out] トランスフォームされた結果の平面を含む D3DXPLANE 構造体へのポインタ。「例」を参照すること。
  • pP
    [in] トランスフォームする平面を格納した入力 D3DXPLANE 構造体へのポインタ。平面を記述するベクトル (a,b,c) は、この関数を呼び出す前に正規化されている必要がある。「例」を参照すること。
  • pM
    [in] トランスフォームの値を格納した、処理の基になる D3DXMATRIX 構造体へのポインタ。ここには、トランスフォーム値の逆転置行列を格納する必要がある。

戻り値

変換された平面を表す D3DXPLANE 構造体へのポインタ。この値は、pOut パラメータの戻り値と同じである。 したがって、この関数は別の関数の引数として使える。

この例では、一様でないスケールを適用して平面をトランスフォームする。

D3DXPLANE   planeNew;
D3DXPLANE   plane(0,1,1,0);
D3DXPlaneNormalize(&plane, &plane);

D3DXMATRIX  matrix;
D3DXMatrixScaling(&matrix, 1.0f,2.0f,3.0f); 
D3DXMatrixInverse(&matrix, NULL, &matrix);
D3DXMatrixTranspose(&matrix, &matrix);
D3DXPlaneTransform(&planeNew, &plane, &matrix);

平面は ax + by + cz + dw = 0 という式で表される。 最初の平面は、(a,b,c,d) = (0,1,1,0) で作成する、y + z = 0 で表される平面である。 スケール後の新しい平面は、(a,b,c,d) = (0, 0.353f, 0.235f, 0) となる。 これは、新しい平面が 0.353y + 0.235z = 0 で表されることを示す。

パラメータ pM には、トランスフォーム行列の逆転置行列を格納する。このメソッドでは、トランスフォームする平面の法線ベクトルも正しくトランスフォームするために、逆転置行列を使う必要がある。

関数の情報

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

参照

D3DXPlaneNormalizeD3DXMatrixRotationXD3DXMatrixRotationYD3DXMatrixRotationZD3DXMatrixInverseD3DXMatrixTranspose