Microsoft DirectX 8.0 (C++)

バンプ マッピング パラメータの設定

アプリケーションでバンプ マップの作成と各ピクセルの内容の設定が完了したら、バンプ マッピング パラメータを設定してレンダリングの準備を行うことができる。バンプ マッピング パラメータには、必要なテクスチャとそのブレンディング処理や、バンプ マップ自体に対するトランスフォームと輝度の制御などを設定する。

C++ でバンプ マッピング パラメータを設定するには

  1. ベース テクスチャ マップ (使用されている場合)、バンプ マップ、および環境マップ テクスチャをテクスチャ ブレンディング ステージに設定する。
  2. 各テクスチャ ステージの色およびアルファ ブレンディング処理を設定する。
  3. バンプ マップ トランスフォーム行列を設定する。
  4. 必要に応じて、輝度スケール値およびオフセット値を設定する。

次のコードでは、ベース テクスチャ マップ、バンプ マップ、およびスペキュラ環境マップの 3 つのテクスチャを、適切なテクスチャ ブレンディング ステージに設定する。

    // 3 つのテクスチャを設定する。
    d3dDevice->SetTexture( 0, d3dBaseTexture );
    d3dDevice->SetTexture( 1, d3dBumpMap );
    d3dDevice->SetTexture( 2, d3dEnvMap );

テクスチャをブレンディング ステージに設定した後、次のコードで、各ステージのブレンディング処理および引数を準備する。

    // カラー処理および引数を設定してバンプ マッピング
    // を準備する。

    // ステージ 0:ベース テクスチャ。
    d3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
    d3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
    d3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
    d3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
    d3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE ); 
    d3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 1 );

    // ステージ 1:バンプ マップ - この例では輝度を使用する。
    d3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 1 );
    d3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_BUMPENVMAPLUMINANCE);
    d3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
    d3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );

    // ステージ 2:スペキュラ環境マップ。
    d3dDevice->SetTextureStageState( 2, D3DTSS_TEXCOORDINDEX, 0 );
    d3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_ADD );
    d3dDevice->SetTextureStageState( 2, D3DTSS_COLORARG1, D3DTA_TEXTURE );
    d3dDevice->SetTextureStageState( 2, D3DTSS_COLORARG2, D3DTA_CURRENT );

ブレンディング処理および引数を設定した後、次のコードで、D3DTSS_BUMPENVMAT00 および D3DTSS_BUMPENVMAT11 テクスチャ ステージ ステートを 1.0 に設定して、2×2 バンプ マッピング行列を単位行列に設定する。行列を単位行列に設定すると、システムでは未修正のバンプ マップのデルタ値が使用されるようになるが、これは必ずしも必要ではない。

    // バンプ マッピング行列を設定する。
    //
    // 注  
    //    これらの呼び出しは、以下のインライン ショートカット関数に依存する。
    //       inline DWORD F2DW( FLOAT f ) { return *((DWORD*)&f); }
    d3dDevice->SetTextureStageState( 1, D3DTSS_BUMPENVMAT00, F2DW(1.0f) );
    d3dDevice->SetTextureStageState( 1, D3DTSS_BUMPENVMAT01, F2DW(0.0f) );
    d3dDevice->SetTextureStageState( 1, D3DTSS_BUMPENVMAT10, F2DW(0.0f) );
    d3dDevice->SetTextureStageState( 1, D3DTSS_BUMPENVMAT11, F2DW(1.0f) );

バンプ マッピング処理に輝度 (D3DTOP_BUMPENVMAPLUMINANCE) を含める場合は、輝度制御を設定する必要がある。輝度制御により、次のステージのテクスチャから色を調整する前にシステムが行う輝度の計算方法を設定する。詳細については、「バンプ マッピングの公式」を参照すること。

    // 輝度制御を設定する。この設定が必要となるのは、
    // 輝度を含むバンプ マップを使用する場合、および
    // D3DTOP_BUMPENVMAPLUMINANCE テクスチャ ブレンディング処理が使用される場合だけである。
    //
    //
    // 注  
    //    これらの呼び出しは、以下のインライン ショートカット関数に依存する。
    //       inline DWORD F2DW( FLOAT f ) { return *((DWORD*)&f); }
    d3dDevice->SetTextureStageState( 1, D3DTSS_BUMPENVLSCALE, F2DW(0.5f) );
    d3dDevice->SetTextureStageState( 1, D3DTSS_BUMPENVLOFFSET, F2DW(0.0f) );

アプリケーションでバンプ マッピング パラメータを設定した後は、通常どおりにレンダリングを実行でき、レンダリングされるポリゴンにバンプ マッピング エフェクトが適用される。

  この例では、パラメータはスペキュラ環境マッピング用に設定されている。ディフューズ ライト マッピングを行う場合は、最後のステージのテクスチャ ブレンディング処理を D3DTOP_MODULATE に設定する。詳細については、「ディフューズ ライト マップ」を参照すること。