Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic サンプル」を参照すること。
ShadowVol2 サンプルでは、シャドウ ボリュームを実装するためにステンシル バッファの作成および使用方法を示す。シャドウ ボリュームは、任意の複雑なオブジェクトに影をキャストするために使用する。これは、ShadowVol サンプルの拡張版である。
ソース ファイル :(SDK ルート)\Samples\Multimedia\D3dim\Src\ShadowVol2
実行可能ファイル :(SDK ルート)\Samples\Multimedia\D3dim\Bin\Shadowvol2.exe
このサンプルは、ステンシル バッファをサポートするデバイスでのみ実行される。
利用可能なコマンドを調べるには、F1 キーを押すか、メニューから選択する。
[Shadow Modes] メニューでは、次のオプションが使用できる。
シャドウ ボリュームは、任意の非平面サーフェスに影をキャストする技法である。このエフェクトは、光源と影をキャストするオブジェクトに関してシャドウ ボリュームを構築することで得られる。このサンプルでは、光源は平面上の点の周りを回転するディレクショナル ライトである。シャドウ ボリュームは、影をキャストするオブジェクトの頂点をライトに対し垂直な平面上にキャストして計算する。平面におけるこれらの点の 2D 凸閉包を見つけ、その 2D 閉包を光の方向に押し出して 3D のシャドウ ボリュームを形成する。シャドウ ボリュームは、影に入るすべてのジオメトリをカバーする程度まで遠くまで延びる必要がある。この特別なシャドウ ボリュームの計算を行うには、影をキャストするオブジェクトが凸状オブジェクトでなければならない。
レンダリングは次のように行う。
ここではアルファ ブレンディングを使用して、色バッファへの書き込みを避けている。シャドウ ボリュームが表示される場所はすべて、ステンシル バッファにマークする。
これらのピクセルは z テストをパスしており、したがって、シャドウ ボリュームの背後で見える。つまり、影にならない。マークされたまま残っているピクセルは、シャドウ ボリュームの前面境界と裏面境界の内側にある。つまり、影になる。