Microsoft DirectX 8.0 (C++) |
DotProduct3 サンプルでは、Microsoft® Direct3D® のバンプ マッピングの別のアプローチを示す。この手法は、ライトのベクトルとサーフェスの法線を組み合わせる数学的な処理にちなんで名前が付けられている。サーフェスの法線は、RGBA フォーマットでテクスチャ マップ (この手法では法線マップと呼ばれる) に保存される従来の (x,y,z) ベクトルである。
すべてのカードが DotProduct3 ブレンディング テクスチャ ステージをサポートしているわけではなく、すべてのカードが Direct3D バンプ マッピングをサポートしているわけでもない。
ソース :(SDK ルート)\Samples\Multimedia\Direct3D\BumpMapping\DotProduct3
実行可能ファイル :(SDK ルート)\Samples\Multimedia\Direct3D\Bin
次の表は実装されているキーを示している。メニュー コマンドを使って同じ操作を行うことができる。
キー | アクション |
---|---|
Enter | シーンを開始および停止する。 |
Space | シーンを少しずつ進める。 |
F2 | 新しいレンダリング デバイスまたはディスプレイ モードを選択するようユーザーに指示する。 |
Alt + Enter | フルスクリーン モードとウィンドウ モードを切り替える。 |
Esc | アプリケーションを終了する。 |
バンプ マッピングをシミュレートするライティングの方程式では、サーフェスの法線とライティングのベクトルの内積を使用する。ライティングのベクトルはテクスチャ係数に渡され、法線はテクスチャ マップにエンコードされる。ブレンディング ステージは次のようになる。
SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3 ); SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR );
次の手順は、法線をテクスチャに保存することである。これを行うために、ベクトルの要素 (XYZW) はそれぞれ、32 ビット浮動小数点数値から符号付き 8 ビット整数に変換され、テクスチャ カラー (RGBA) にパックされる。コードでは、独自に生成した法線マップ、およびバンプ マッピング テクスチャ イメージから構築された法線マップを使って、これを行う方法を示している。
バンプ マッピング手法の一部の機能しかサポートしていないカードもある。一部のハードウェアでは、バンプ マッピングをサポートしていない場合や、一部しかサポートしていない場合がある。バンプ マッピングの詳細については、Microsoft® DirectX® SDK のマニュアルを参照すること。
このサンプルでは、ヘルパー関数などのプログラミング要素から構成される共通の DirectX コードを使用している。このコードは DirectX SDK のほかのサンプルと共有されている。共通のヘッダーおよびソース コードは、(SDK ルート)\Samples\Multimedia\Common にある。