次の方法で共有


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