渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

C#でDirectX11 プロジェクション座標変換して三角形を表示させる


C#でDirectX11 三角形を回転アニメーションさせる - 渋谷ほととぎす通信の続きです。

ワールド座標にそのままポリゴンを表示させていましたが、今回はプロジェクション座標変換して、ビューポート座標に三角形を表示させてみます。

まずはシェーダを書き換えます。

座標変換の手順は以下の流れになります。

  1. ワールド座標変換
  2. ビュー座標変換 
  3. プロジェクション座標変換

この中で、ビュー変換~プロジェクション座標変換用の行列はCPU側で生成して、シェーダに渡すため、それをVPMatrixという変数を定義して、頂点シェーダ内で反映しています。


C#側を見ていきます。

いきなり変更部分のコードですが、Matrixクラスに便利なLookAtRH関数PerspectiveFovRH関数という便利なAPIが用意されているので、難なく行列を作ることができます。

f:id:esakun:20181115123852g:plain
前回と違い、三角形が変にカリングされることなく表示することができました。
全体コードは中々長いので最後に載せておきます。

注意点

DirectXとUnityでは行列の乗算方向が逆です。

MVP行列を作成するとき、UnityではP * V * Mと乗算しますが、 DirectXではM * V* Pという順番になります。 シェーダのmul関数も同様です。

参考

全体コードはコチラ