こんにちは、エンジニアのオオバです。
前回ワールド座標にそのままポリゴンを表示させていました。
あわせて読みたい記事
C#でDirectX11 三角形を回転アニメーションさせる
今回はプロジェクション座標変換して、ビューポート座標に三角形を表示させてみます。
まずはシェーダーを書き換えます。
座標変換の手順は以下の流れになります。
- ワールド座標変換
- ビュー座標変換
- プロジェクション座標変換
この中で、ビュー変換~プロジェクション座標変換用の行列はCPU側で生成して、シェーダーに渡すため、それをVPMatrix
という変数を定義して、頂点シェーダー内で反映しています。
C#側を見ていきます。
いきなり変更部分のコードですが、Matrixクラスに便利なLookAtRH関数
とPerspectiveFovRH関数
という便利なAPIが用意されているので、難なく行列を作ることができます。
前回と違い、三角形が変にカリングされることなく表示することができました。
全体コードは中々長いので最後に載せておきます。
注意点
DirectXとUnityでは行列の乗算方向が逆です。
MVP行列を作成するとき、UnityではP * V * M
と乗算しますが、 DirectXではM * V* P
という順番になります。
シェーダーのmul関数も同様です。
全体コードはコチラ
vpmatrix_full.cs · GitHub
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Windows8.1
- SlimDX 2.0.13.43
参考サイト