テクスチャー座標の自動生成 (Direct3D 9)
システムでは、トランスフォームされたカメラ空間の位置や頂点から法線をテクスチャー座標として使用することができます。また、キューブ環境マップを処理するために使用する 3 要素ベクトルを計算することもできます。頂点で明示的に指定するテクスチャー座標と同様に、自動的に生成されたテクスチャー座標をテクスチャー座標トランスフォームの入力として使用できます。
テクスチャー座標を自動生成することによって、頂点フォーマットに明示的なテクスチャー座標が不要になるので、ジオメトリ データに必要な帯域幅を大幅に削減することができます。多くの場合、システムで生成されたテクスチャー座標は、特殊効果を生み出すトランスフォームと共に使用できます。ただし、これは特殊な目的で使用する機能なので、多くの場合は、明示的なテクスチャー座標を使用します。
テクスチャー座標の自動生成の構成
C++ では、(D3DTEXTURESTAGESTATETYPE 列挙型の) D3DTSS_TEXCOORDINDEX テクスチャー ステージ ステートを使用して、テクスチャー座標の生成方法を制御します。
通常、このステートは、頂点フォーマットでエンコードされた特定のテクスチャー座標を使用するように指定します。このステートに割り当てた値で D3DTSS_TCI_CAMERASPACENORMAL、D3DTSS_TCI_CAMERASPACEPOSITION、または D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR フラグを指定した場合、システムの動作が大きく変わります。これらのフラグのいずれかがある場合、テクスチャー ステージでは、頂点フォーマット内のテクスチャー座標が無視され、システムによって生成される座標が優先されます。次の一覧に各フラグの意味を示します。
D3DTSS_TCI_CAMERASPACENORMAL
カメラ空間でトランスフォームされた頂点法線を入力テクスチャー座標として使用します。
D3DTSS_TCI_CAMERASPACEPOSITION
カメラ空間でトランスフォームされた頂点の位置を入力テクスチャー座標として使用します。
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR
カメラ空間でトランスフォームされた反射ベクトルを入力テクスチャー座標として使用します。反射ベクトルは、頂点座標と法線ベクトルを使って計算されます。
テクスチャー座標インデックス フラグは、相互に排他的です。この例では以下を使用します。
- このテクスチャー ステージの入力テクスチャー座標としての (カメラ空間の) 頂点位置
- D3DRENDERSTATE_WRAP1 レンダリング ステートで設定されたラップ モード
// Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface
d3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX,
D3DTSS_TCI_CAMERASPACEPOSITION | 1);
自動的に生成されたテクスチャー座標は、テクスチャー座標トランスフォームの入力値として最も便利です。また、アプリケーションでキューブ環境マップの 3 要素ベクトルを計算する必要がない点も有利です。
球面マッピングでは、モデリング時にあらかじめ計算されたテクスチャー マップが使用され、このマップは、クロームの球体によって表現された環境全体を含みます。Direct3D には、レンダリング ステート D3DTSS_TCI_CAMERASPACENORMAL を使用するテクスチャー座標生成機能があり、カメラ空間での頂点の法線を使用し、テクスチャー トランスフォームによってテクスチャー座標を生成します。