渋谷ほととぎす通信

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

C#でDirectX11 四角形の描画


今まで三角形を描画して、頂点カラーやテクスチャを適用していましたが、そろそろそれらは卒業して四角形を描画します。四角形は2つの三角形を組み合わせるので、四角形を描画するというより、2枚の三角形を描画するということになります。

※本記事は過去の三角形描画からの変更点に重点を置いて執筆していきます。

準備

四角形を描画するにあたり、VertexBufferだけではなく頂点を結ぶ順番のバッファIndexBufferを使用していきます。

f:id:esakun:20181203133628j:plain:w240

このような四角形を描画する予定なので、 頂点を

1つ目の三角形・・0, 1, 2

2つ目の三角形・・0, 2, 3

という時計回りの順番で頂点を結んでいきます。
ポリゴンには裏表があるので、DirectXでは時計回りにメッシュを作ることで表向きで描画します。

IndexBufferの作り方

以前三角形を描画時にVertexBufferを作った時と同様、Deviceを通して作成します。

以前作成したSlimDXのライブラリSlimDXSketch内のIndexBufferを作成するコードがこちらです。

引数のindexesはint型の配列です。

IndexBufferのバインド

四角形を描画する前にVertexBufferと同様IndexBufferもDeviceとバインドします。

SlimDXSketchの部分コードになりますが、以下のようなコードになります。

描画メソッドがDrawからDrawIndexedへ

ImmediateContext.DrawIndexed(6, 0, 0);

DrawIndexedメソッドがIndexBufferを使用した描画になります。
第一引数が重要で、ここにIndexBufferに詰め込んだ頂点数をセットします。
※第2第3引数は未調査

今回の場合四角形は三角形2つ使うので、合計6頂点を結ぶことになり6を代入しています。

f:id:esakun:20181203130143j:plain

実行するとこのように、四角形が描画されます。


以上