テクスチャ座標変換 (Direct3D 9)
Direct3D デバイスでは、4 x 4 マトリックスを適用することで、頂点のテクスチャ座標を変換できます。 システムは、ジオメトリと同じ方法でテクスチャ座標に変換を適用します。 任意の変換 (スケール、回転、平行移動、投影、せん断、またはこれらの任意の組み合わせ) は、4x4 行列で実行できます。
注意
Direct3D では、変換された頂点と点灯した頂点は変更されません。 その結果、変換された頂点と点灯した頂点を使用するアプリケーションでは、Direct3D を使用して頂点のテクスチャ座標を変換することはできません。
ハードウェア高速変換と照明操作をサポートするデバイス (T&L HAL デバイス) もテクスチャ座標の変換を高速化します。 変換のハードウェア アクセラレーションを使用できない場合、Direct3D ジオメトリ パイプラインのプラットフォーム固有の最適化は、テクスチャ座標変換に適用されます。
テクスチャ座標変換は、ジオメトリのテクスチャ座標を直接変更する必要を回避しながら、特殊効果を生成する場合に便利です。 単純な平行移動または回転マトリックスを使用してオブジェクトのテクスチャをアニメーション化したり、Direct3D によって自動的に生成されるテクスチャ座標を変換して、投影テクスチャや動的ライト マッピングなどの高度な効果を簡略化したり加速したりできます。 さらに、テクスチャ座標変換を使用して、複数のテクスチャ ステージで、複数の目的で 1 つのテクスチャ座標セットを再利用できます。
テクスチャ座標変換の設定と取得
アプリケーションがジオメトリに使用するマトリックスと同様に、IDirect3DDevice9::SetTransform メソッドと IDirect3DDevice9::GetTransform メソッドを呼び出して、テクスチャ座標変換を設定および取得します。 これらのメソッドは、 D3DTRANSFORMSTATETYPE 列挙型のD3DTS_TEXTURE7メンバーを介してD3DTS_TEXTURE0を受け入れ、テクスチャ ステージ 0 から 7 の変換マトリックスをそれぞれ識別します。
次のコードでは、テクスチャ ステージ 0 のテクスチャ座標に適用するマトリックスを設定します。
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );
// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );
テクスチャ座標変換の有効化
D3DTSS_TEXTURETRANSFORMFLAGS テクスチャ ステージの状態は、テクスチャ座標変換の適用を制御します。 このテクスチャ ステージ状態の値は、 D3DTEXTURETRANSFORMFLAGS 列挙型によって定義されます。
D3DTSS_TEXTURETRANSFORMFLAGSが D3DTTFF_DISABLE (既定値) に設定されている場合、テクスチャ座標変換は無効になります。 テクスチャ座標変換がステージ 0 で有効になっていると仮定すると、次のコードでは無効になります。
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_DISABLE );
D3DTEXTURETRANSFORMFLAGS で定義されている他の値は、テクスチャ座標変換を有効にし、結果として得られるテクスチャ座標要素の数をラスタライザーに渡すために使用されます。 たとえば、次のコードを使用します。
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2 );
D3DTTFF_COUNT2値は、テクスチャ ステージ 0 の変換マトリックス セットを適用し、変更されたテクスチャ座標の最初の 2 つの要素をラスタライザーに渡すようにシステムに指示します。
D3DTTFF_PROJECTEDテクスチャ変換フラグは、投影テクスチャの座標を示します。 このフラグを指定すると、ラスタライザーは、渡された要素を最後の要素で除算します。 たとえば、次のコードを使用します。
// For this example, assume the d3dDevice variable contains a
// valid pointer to an IDirect3DDevice9 interface.
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );
次の使用例は、3 つのテクスチャ座標要素をラスタライザーに渡すようシステムに通知します。 ラスタライザーは、最初の 2 つの要素を 3 番目の要素で除算し、テクスチャに対処するために必要な 2D テクスチャ座標を生成します。
関連トピック