D3DXPlaneTransformArray
行列で平面の配列をトランスフォームします。各平面を指定するベクトルは正規化する必要があります。
D3DXPLANE *
D3DXPlaneTransformArray(
D3DXPLANE * pOut,
UINT OutStride,
CONST D3DXPLANE* pP,
UINT PStride,
CONST D3DXMATRIX* pM,
UINT n
);
パラメータ
- pOut
結果としてトランスフォームされた平面を含む D3DXPLANE 構造体へのポインターです。例を参照してください。 - OutStride
各トランスフォームされた平面のストライド。 - pP
トランスフォームされる平面の配列を含む、入力の D3DXPLANE 構造体へのポインターです。平面を示すベクトル (a,b,c) は、この関数を呼び出す前に正規化する必要があります。例を参照してください。 - PStride
各トランスフォームされない平面のストライド。 - pM
トランスフオーム値の逆転置を含む D3DXMATRIX 構造体へのポインター。 - n
トランスフォームする平面の数
戻り値
トランスフォームされた平面を示す 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,0) で作成されます。この平面は、y + z = 0 で表されます。スケーリング後、新しい平面には (a,b,c,d) = (0, 0.353f, 0.235f, 0) が含まれます。これは、0.353y + 0.235z = 0 で表される新しい平面を示します。
パラメーター pM には、トランスフォーム行列の逆転置が含まれます。逆転置は、トランスフォームされた平面の法線ベクトルも正しくトランスフォームできるように、このメソッドで必要となります。
要件
ヘッダー: D3dx9math.h 宣言
ライブラリ: D3dx9.lib 内容
関連項目
D3DXPlaneNormalize, D3DXMatrixRotationX, D3DXMatrixRotationY, D3DXMatrixRotationZ, D3DXMatrixInverse, D3DXMatrixTranspose