Microsoft DirectX 8.0 (C++) |
SphereMap サンプルでは、球体マッピングと呼ばれる環境マッピングの手法を示す。環境マッピングは、3D オブジェクトの周囲の環境 (ライトなど) をテクスチャ マップに配置し、ライティングの計算を行わずにオブジェクトに複雑なライティング エフェクトを適用できる手法である。
環境マッピングの手法 (キューブ マッピングや射影テクスチャなど) の一部の機能しかサポートしていないカードもある。環境マッピング、キューブ マッピング、および射影テクスチャの詳細については、Microsoft® DirectX® SDK のマニュアルを参照すること。
ソース :(SDK ルート)\Samples\Multimedia\Direct3D\EnvMapping\SphereMap
実行可能ファイル :(SDK ルート)\Samples\Multimedia\Direct3D\Bin
次の表は実装されているキーを示している。メニュー コマンドを使って同じ操作を行うことができる。
キー | アクション |
---|---|
Enter | シーンを開始および停止する。 |
Space | シーンを少しずつ進める。 |
F2 | 新しいレンダリング デバイスまたはディスプレイ モードを選択するようユーザーに指示する。 |
Alt + Enter | フルスクリーン モードとウィンドウ モードを切り替える。 |
Esc | アプリケーションを終了する。 |
球体マッピングでは、モデリング時にあらかじめ計算された、クロームの球体によって反射された環境全体を含むテクスチャ マップを使用する。この手法では、各頂点について、その法線を計算し、その法線がクロームの球体上で一致する位置を見つけて、そのテクスチャ座標を頂点に割り当てる。
マッチングは複雑ではないが、各フレームの各頂点について計算が必要である。Direct3D には、このために使用できるテクスチャ座標生成機能がある。関連するレンダリング ステート処理は D3DTSS_TCI_CAMERASPACENORMAL で、カメラ空間での頂点の法線を使用し、テクスチャ トランスフォームによって変形し、テクスチャ座標を生成する。次に、テクスチャ行列を設定して残りの処理を行う。この単純なケースでは、行列は、カメラ空間 (-1, +1) からテクスチャ空間 (0,1) を取得するために、テクスチャ座標をスケーリングして、平行移動するだけである。
このサンプルでは、ヘルパー関数などのプログラミング要素から構成される共通の DirectX コードを使用している。このコードは DirectX SDK のほかのサンプルと共有されている。共通のヘッダーおよびソース コードは、(SDK ルート)\Samples\Multimedia\Common にある。