特殊効果 (Direct3D 9)
このトピックでは、テクスチャ座標処理で実現される特殊効果の例について説明します。
- モデルでのテクスチャのアニメーション化 (翻訳または回転による)
- モデルのカメラ空間位置の線形関数としてのテクスチャ座標の作成
- 立方環境マップを使用した環境マッピングの実行
- 投影テクスチャリングの実行
モデルでのテクスチャのアニメーション化 (翻訳または回転による)
頂点形式で 2D テクスチャ座標を定義します。
// Use a single texture, with 2D texture coordinates. This // bit-pattern should be expanded to include position, normal, // and color information as needed. DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
2D テクスチャ座標を使用するようにラスタライザーを構成します。
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
適切なテクスチャ座標変換マトリックスを定義して設定します。
// M is a D3DMATRIX being set to translate texture // coordinates in the U and V directions. // 1 0 0 0 // 0 1 0 0 // du dv 1 0 (du and dv change each frame) // 0 0 0 1 D3DMATRIX M = D3DXMatrixIdentity(); // declared in d3dutil.h M._31 = du; M._32 = dv;
モデルのカメラ空間位置の線形関数としてのテクスチャ座標の作成
D3DTSS_TCI_CAMERASPACEPOSITION フラグを使用して、テクスチャ変換への入力として、カメラ空間内の頂点位置を渡すようにシステムに指示します。
// The input vertices have no texture coordinates, saving // bandwidth. Three texture coordinates are generated by // using vertex position in camera space (x, y, z). SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
ラスタライザーに 2D テクスチャ座標を期待するように指示します。
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
線形関数を適用する行列を定義および設定します。
// Generate texture coordinates as linear functions // so that: // u = Ux*x + Uy*y + Uz*z + Uw // v = Vx*x + Vy*y + Vz*z + Vw // The matrix M for this case is: // Ux Vx 0 0 // Uy Vy 0 0 // Uz Vz 0 0 // Uw Vw 0 0 SetTransform(D3DTS_TEXTURE0, &M);
立方環境マップを使用した環境マッピングの実行
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR フラグを使用して、テクスチャ座標を 3 次マッピングの反射ベクトルとして自動的に生成するようにシステムに指示します。
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
ラスタライザーに、3 つの要素を含むテクスチャ座標を期待するように指示します。
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
投影テクスチャリングの実行
D3DTSS_TCI_CAMERASPACEPOSITION フラグを使用して、テクスチャ変換マトリックスへの入力として頂点の位置を渡すようにシステムに指示します。
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
テクスチャ プロジェクション マトリックスを作成して適用します。 これは、このドキュメントの範囲外であり、いくつかの業界の記事のトピックです。
ラスタライザーに対して、3 要素の投影テクスチャ座標を想定するように指示します。
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);
関連トピック