Motion Blur サンプル

Motion Blur サンプル

説明

MotionBlur サンプルは、いくつかの頂点を動作の方向に沿って伸縮し、透明度をフェードしてモーション ブラー エフェクトを作成する頂点シェーダを示す。

パス

ソース ファイル : (SDK ルート)\Samples\C++\Direct3D\MotionBlur

実行可能ファイル : (SDK ルート)\Samples\C++\Direct3D\Bin

ユーザーズ ガイド

次の表は、実装されているキーを示している。メニュー コマンドを使って同じ操作を行うことができる。

キー 動作
上矢印キー モーション ブラーの軌跡を長くする。
下矢印キー モーション ブラーの軌跡を短くする。
Enter シーンを開始および停止する。
Space キー シーンを少しずつ進める。
F1 ヘルプまたは使用可能なコマンドを表示する。
F2 新しいレンダリング デバイスまたはディスプレイ モードを選択するようユーザーに指示する。
Alt+Enter フルスクリーン モードとウィンドウ モードを切り替える。
Esc アプリケーションを終了する。

このサンプルでは、マウスを使って視点の位置を制御できる。

プログラミング上の注意

このサンプルでは、同じ ID3DXMesh オブジェクトで表した 2 つの球を示す。球は楕円内を移動し、各球は現在位置および最後に計算された位置の行列を記憶する。"標準" (通常の) シェーダを使って 1 回、およびモーション ブラー シェーダを使って 1 回、各球をレンダリングする。

モーション ブラー シェーダは、最後のフレームのワールド行列 (c0) および現在のフレームのワールド行列 (c4) を使って頂点位置 (v0) をトランスフォームし、結果を r0 および r1 に格納する。また、現在のフレームのワールド行列 (c4) を使って法線ベクトル (v1) をトランスフォームし、結果を r2 に格納する。

r3 は r0 から r1 までのモーション デルタ ベクトルを取得し、正規化される。次に、r4.x を頂点法線とモーション デルタ ベクトルの内積に設定する。そのため、頂点法線がモーション デルタ ベクトルに近づくほど、その頂点の r4.x は大きくなる。r4.x が 0 未満の場合、頂点法線はモーション デルタ ベクトルから遠ざかる。これらの頂点のみにブラーを適用する。

次のセクションでは、r4.x が 0 未満の場合 (c20.y) は r4.y を 1 に設定する。r4.x が 0 または正の場合、0 に設定する。これにより、法線が動作の方向の背面にある頂点のみにモーション ブラーを適用する。r4.y が 0 の場合、r1 は変化しない。r4.y が 1 の場合、r1 に -r3 (動作の方向) を加算する。

次に、r1 を回転行列と射影行列を使ってトランスフォームし、結果を oPos に入れる。

最後に、ディフューズ色を計算して oD0 に保存する。このとき、r4.x (頂点法線と動作の方向の内積) が負の場合は oD0 のアルファ ブレンディングを 0 に設定し、それ以外の場合は 1 に設定する。これにより、ブラーは実際のオブジェクトから遠くなるにつれてフェードアウトする。

このサンプルは、Microsoft® DirectX® ソフトウェア開発キット (SDK) の他のサンプルと共有するサンプル フレームワーク コードを使っている。サンプル フレームワークのヘッダーは (SDK ルート)\Samples\C++\Common\Include、ソース コードは (SDK ルート)\Samples\C++\Common\Src にある。