D3DXPlaneTransformArray 関数 (D3DX10Math.h)
注意
D3DX10 ユーティリティ ライブラリは非推奨です。 代わりに DirectXMath を使用することをお勧めします。
行列によって平面の配列を変換します。 各平面を記述するベクトルは正規化する必要があります。
構文
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 [in]
-
型: UINT
変換された各平面のストライド。
-
pP [in]
-
型: const D3DXPLANE*
変換する平面の配列を含む入力 D3DXPLANE 構造体へのポインター。 この関数を呼び出す前に、平面を記述するベクター (a、b、c) を正規化する必要があります。 例を参照してください。
-
PStride [in]
-
型: UINT
変換されていない各平面のストライド。
-
pM [in]
-
型: const D3DXMATRIX*
変換値の逆転置を含むソース D3DXMATRIX 構造体へのポインター。
-
n [in]
-
型: 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 + cz + dw = 0 で記述されます。 最初の平面は、(a,b,c,d) = (0,1,1,1,0) で作成されます。これは、y + z = 0 で記述された平面です。 スケーリング後、新しい平面には (a,b,c,d) = (0, 0.353f, 0.235f, 0) が含まれます。これは、0.353y + 0.235z = 0 で記述される新しい平面を示します。
パラメーター pM には、変換行列の逆転置が含まれます。 変換された平面の法線ベクトルも正しく変換できるように、このメソッドでは逆転置が必要です。
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|
関連項目