Microsoft DirectX 8.0 (C++)

テクスチャ座標の自動生成の構成

C++ の場合、(D3DTEXTURESTAGESTATETYPE 列挙型からの) D3DTSS_TEXCOORDINDEX テクスチャ ステージ ステートを使用して、テクスチャ座標の生成方法を制御する。

通常、このステートは、頂点フォーマットで符号化された特定のテクスチャ座標セットを使用するようシステムに知らせる。このステートに割り当てる値の中に、D3DTSS_TCI_CAMERASPACENORMAL、D3DTSS_TCI_CAMERASPACEPOSITION、または D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR フラグを含めた場合、システムで実行される処理は大きく異なってくる。これらのフラグのいずれかでも存在しているとき、テクスチャ ステージは頂点フォーマットのテクスチャ座標を無視し、システムが生成する座標を優先する。各フラグの意味は、次のとおりである。

D3DTSS_TCI_CAMERASPACENORMAL
頂点法線を入力テクスチャ座標として使用する。頂点法線はカメラ空間にトランスフォームされる。
D3DTSS_TCI_CAMERASPACEPOSITION
頂点位置座標を入力テクスチャ座標として使用する。頂点位置座標がカメラ空間にトランスフォームされる。
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR
反射ベクトルを入力テクスチャ座標として使用する。反射ベクトルがカメラ空間にトランスフォームされる。反射ベクトルは、入力頂点位置座標と法線ベクトルから計算される。

これらのフラグは互いに排他的である。これらのフラグのいずれかを使用する場合は、テクスチャ ラッピング モードを決定するためにシステムで使用するインデックス値を指定できる。

次のコードは、C++ でのこれらのフラグの使用方法を示している。

/*
* このコードでは、変数 d3dDevice は、IDirect3DDevice8 インターフェイスへの
* 有効なポインタであると仮定している。
 *
* このテクスチャ ステージの入力テクスチャ座標として
* 頂点位置座標 (カメラ空間) を使用し、
* D3DRENDERSTATE_WRAP1 レンダリング ステートのラップ モード セットを使用する。
 */
d3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 
                                   D3DTSS_TCI_CAMERASPACEPOSITION | 1 );

  自動生成されたテクスチャ座標は、テクスチャ座標トランスフォームの入力値として非常に便利であり、またキューブ環境マップの 3 要素ベクトルを計算する必要がないという点でも便利である。

参照

テクスチャ座標トランスフォームキューブ環境マップ