次の方法で共有


特殊効果 (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 フラグを使用して、キューブ マッピングの反射ベクトルとしてテクスチャー座標を自動的に生成するようにシステムに指定します。

    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);