こんにちは、エンジニアのオオバです。

前回ワールド座標にそのままポリゴンを表示させていました。

今回はプロジェクション座標変換して、ビューポート座標に三角形を表示させてみます。

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

vpmatrix_part.fx · GitHub

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

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

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

C#側を見ていきます。

vpmatrix_part.cs · GitHub

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

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

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

注意点

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

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

全体コードはコチラ
vpmatrix_full.cs · GitHub

オススメ記事
検証環境
参考サイト