Platform SDK: DirectX

ShadowVol2 サンプル

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic サンプル」を参照すること。

[C++]

説明

ShadowVol2 サンプルでは、シャドウ ボリュームを実装するためにステンシル バッファの作成および使用方法を示す。シャドウ ボリュームは、任意の複雑なオブジェクトに影をキャストするために使用する。これは、ShadowVol サンプルの拡張版である。

パス

ソース ファイル :(SDK ルート)\Samples\Multimedia\D3dim\Src\ShadowVol2

実行可能ファイル :(SDK ルート)\Samples\Multimedia\D3dim\Bin\Shadowvol2.exe

ユーザーズ ガイド

このサンプルは、ステンシル バッファをサポートするデバイスでのみ実行される。

利用可能なコマンドを調べるには、F1 キーを押すか、メニューから選択する。

[Shadow Modes] メニューでは、次のオプションが使用できる。

プログラミング上の注意

シャドウ ボリュームは、任意の非平面サーフェスに影をキャストする技法である。このエフェクトは、光源と影をキャストするオブジェクトに関してシャドウ ボリュームを構築することで得られる。このサンプルでは、光源は平面上の点の周りを回転するディレクショナル ライトである。シャドウ ボリュームは、影をキャストするオブジェクトの頂点をライトに対し垂直な平面上にキャストして計算する。平面におけるこれらの点の 2D 凸閉包を見つけ、その 2D 閉包を光の方向に押し出して 3D のシャドウ ボリュームを形成する。シャドウ ボリュームは、影に入るすべてのジオメトリをカバーする程度まで遠くまで延びる必要がある。この特別なシャドウ ボリュームの計算を行うには、影をキャストするオブジェクトが凸状オブジェクトでなければならない。

レンダリングは次のように行う。

  1. 普通にジオメトリのレンダリングを行う。
  2. z バッファまたは色バッファに書き込むことなくシャドウ ボリュームのレンダリングを行う。

    ここではアルファ ブレンディングを使用して、色バッファへの書き込みを避けている。シャドウ ボリュームが表示される場所はすべて、ステンシル バッファにマークする。

  3. 次に、カル オーダーを逆転し、シャドウ ボリュームの裏面をレンダリングする。今度は、ステンシル バッファの、カバーされたピクセルのマークをすべて解除する。

    これらのピクセルは z テストをパスしており、したがって、シャドウ ボリュームの背後で見える。つまり、影にならない。マークされたまま残っているピクセルは、シャドウ ボリュームの前面境界と裏面境界の内側にある。つまり、影になる。

  4. これらのピクセルは、ビューポートをカバーする大きな黒い矩形にブレンドされ、影を生成する。