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 にある。