D3DXPlaneTransformArray 関数
D3DXPlaneTransformArray 関数
行列を使って平面をトランスフォームする。入力行列は、実際のトランスフォームの逆転置行列である。
構文
D3DXPLANE *D3DXPlaneTransformArray(
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 |
参照
D3DXPlaneNormalize、D3DXMatrixRotationX、D3DXMatrixRotationY、D3DXMatrixRotationZ、D3DXMatrixInverse、D3DXMatrixTranspose