次の方法で共有


テクスチャー座標の自動生成 (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 を使用するテクスチャー座標生成機能があり、カメラ空間での頂点の法線を使用し、テクスチャー トランスフォームによってテクスチャー座標を生成します。

関連項目

テクスチャー座標トランスフォーム (Direct3D 9)キューブ環境マッピング (Direct3D 9)