Microsoft DirectX 8.0 (C++) |
次に示すのは、テクスチャ座標処理によって特殊なテクスチャ エフェクトを出す方法である。
モデル上でテクスチャをアニメーションする (平行移動または回転を利用)
// 2D テクスチャ座標を持つ単一のテクスチャを使用する。このビット パターンは、 // 必要に応じて、位置座標、法線、および色情報を追加できるように // 拡張する必要がある。 DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
// M は、U および V 方向のテクスチャ座標を平行移動するための // D3DMATRIX である。 // 1 0 0 0 // 0 1 0 0 // du dv 1 0 (du および dv は各フレームを変更する) // 0 0 0 1 D3DMATRIX M = D3DXMatrixIdentity(); // d3dutil.h に宣言される。 M._31 = du; M._32 = dv;
モデルのカメラ空間位置座標の線形関数としてテクスチャ座標を作成する
// 入力頂点にはテクスチャ座標がなく、 // 帯域幅が節約されている。3 つのテクスチャ座標は、カメラ空間 (x, y, z) の頂点位置座標を使用して // 生成される。 SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
// 2 つの出力座標を使用する。 SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
// 次に示すように、 // テクスチャ座標を線形関数として生成する。 // u = Ux*x + Uy*x + Uz*x + Uw // v = Vx*x + Vy*x + Vz*x + Vw // この場合、行列 M は次のようになる。 // Ux Vx 0 0 // Uy Vy 0 0 // Uz Vz 0 0 // Uw Vw 0 0 SetTransform(D3DTS_TEXTURE0, &M);
キューブ環境マップによる環境マッピングを実行する
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
射影テクスチャを実行する
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
// 2 つの出力座標を使用する。 SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);