D3DXPlaneTransformArray 関数 (D3DX10Math)

平面の配列を行列で変換します。 各平面を表すベクターを正規化する必要があります。

構文

D3DXPLANE* D3DXPlaneTransformArray(
  _Inout_       D3DXPLANE  *pOut,
  _In_          UINT       OutStride,
  _In_    const D3DXPLANE  *pP,
  _In_          UINT       PStride,
  _In_    const D3DXMATRIX *pM,
  _In_          UINT       n
);

パラメーター

Pout [in、out]

型: D3DXPLANE*

変換された平面を含む D3DXPLANE 構造体へのポインター。 例を参照してください。

Outstride [から]

型: UINT

変換された各平面のストライド。

pP [から]

型: Const D3DXPLANE *

変換するプレーンの配列を格納している入力 D3DXPLANE 構造体へのポインター。 この関数が呼び出される前に、平面を記述するベクター (a、b、c) を正規化する必要があります。 例を参照してください。

Pstride [から]

型: UINT

変換されていない各平面のストライド。

pM [から]

型: Const D3DXMATRIX *

変換値の逆転置を含む、ソースの D3DXMATRIX 構造体へのポインター。

[ での n]

型: UINT

変換するプレーンの数。

戻り値

型: D3DXPLANE*

変換された平面を表す D3DXPLANE 構造体へのポインター。 これは、この関数を別の関数のパラメーターとして使用できるように、pOut パラメーターで返される値と同じです。

解説

この例では、一様でないスケールを適用して1つの平面を変換します。

#define ARRAYSIZE 4
D3DXPLANE planeNew[ARRAYSIZE];
D3DXPLANE plane[ARRAYSIZE];

for(int i = 0; i < ARRAYSIZE; i++)
{
    plane = D3DXPLANE( 0.0f, 1.0f, 1.0f, 0.0f );
    D3DXPlaneNormalize( &plane[i], &plane[i] );
}

D3DXMATRIX  matrix;
D3DXMatrixScaling( &matrix, 1.0f, 2.0f, 3.0f ); 
D3DXMatrixInverse( &matrix, NULL, &matrix );
D3DXMatrixTranspose( &matrix, &matrix );
D3DXPlaneTransformArray( &planeNew, sizeof (D3DXPLANE), &plane, 
                         sizeof (D3DXPLANE), &matrix, ARRAYSIZE );

平面は、ax + by + cs-cz + dw = 0 によって記述されます。 最初の平面は、(a, b, c, d) = (0, 1, 1, 0) で作成されます。これは、y + z = 0 で表される平面です。 スケーリング後、新しい平面には (a、b、c、d) = (0, 0.353 f, 0.235 f, 0) が含まれます。これは、0.353 y + 0.235 z = 0 によって記述される新しい平面を示します。

PM のパラメーターには、変換行列の逆置換が含まれています。 変換された平面の法線ベクトルも正しく変換できるように、このメソッドでは逆置換が必要です。

必要条件

要件
ヘッダー
D3DX10Math
ライブラリ
D3DX10

関連項目

数値演算関数