今までは、頂点バッファで座標を指定して三角形やテクスチャを描画していましたが、
今回は定数バッファを用いてシェーダにパスを通すことで行列変換し位置(移動)やスケールを制御します。
これで3Dの動きも簡単に描画可能です。
説明よりもサンプルを見れば分かるかと思います。
プロジェクトの作成
前回同様にプロジェクトを新しく作成します。
プロジェクト名は、” 0006_ConstantBuffer “としておきましょう。
プロジェクトの設定
DirectXSDKのパスを通すために、毎回プロジェクトの設定をいちいちしなければなりません。
前の記事「4. 三角形」と同じように「インクルードディレクトリパス」と「ライブラリディレクトリパス」の設定をしてください。
やり方は前と同じです。
ソースコード
以下がソースです。これも前回同様、流れが分かりやすいようにmain.cppだけでまとめました。
以下のソースをコピペするか、ダウンロードしてVisual Studio の「ソースファイル」に保存してください。
コピペするなら、
「ソースファイル」で右クリックして
「追加」→「新しい項目」で、「C++ ファイル」を選び、名前を” main.cpp “にして追加ボタンを押して作成してください。
ダウンロードなら、
同じく「ソースファイル」で右クリックして
「追加」→「既存の項目」で、main.cppを選択して追加してください。
Y軸回転していますので、ラスタライザ処理を施しました。
定数バッファをシェーダに渡して行列変換できていることが分かるかと思います。
各行列は一つにまとめた方がすっきりしますし、掛け算するだけで行列計算(転置)できているので問題ないかと思います。
気を付けてほしいのは、転置するときは「スケール・回転・移動」の順番でなければ行列変換できないことに注意してください。
次に、シェーダ本文です。
これは「ソース ファイル」から「追加」→「新しい項目」で、
「Visual C++」→「HLSL」の中で.hlslなら何でもいいのですが(Visual Studio側が勝手にテンプレートを作るだけなので)、
ここでは「ジオメトリ シェーダー ファイル (.hlsl)」を選んで、
名前を” shaders.hlsl “にして追加ボタンを押してください。
すると、「ソース ファイル」中にshaders.hlslが作れますので、
中にあるコードを全て以下のコードでコピペして上書きするか、
ダウンロードして「既存の項目」で追加しましょう。
shaders.hlsl
シェーダ言語も見たら慣れで分かるかと思います。
頂点シェーダのエントリでwvpを噛ませて行列変換しています。
これで位置やスケールを制御できます。
今回も引き続き、前回と同じようにプロパティで「カスタムビルドツール」に設定しましょう。
以上で作成は完了です!!
以下のようになっていればOK。
ツールバーの「デバッグ」から「デバッグの開始(F5)」で実行できます。
ビルドするときは、「0006_ConstantBuffer」を右クリックして「スタートアップ プロジェクトに設定」を押してプロジェクトターゲットを変更してからするようにしてください。
スケーリングと動きが付加されたレインボーの四角形が表示できたら終わりです。お疲れさまでした。
画面全体に描画されていたレインボーの四角形をシェーダでコントロールし更新することでスケーリングと動きを与えることができました。
最後に
学習を進めていく中でバージョンアップによる差分をすぐに確認できるように「WinMerge」というソフトを導入した方がすぐにでもプログラムを理解できるようになるかと思います。
この作例では、記事「DirectX11 | 4. 三角形」でのmain.cppと今回のmain.cppとで差分を確認して学習に活かしてください。
何のコードが変更されたり追加されたのかがすぐに分かります。