渋谷ほととぎす通信

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

C#でDirectX11 頂点カラーを使って三角形を描画する


C#でDirectX FPSを管理する - 渋谷ほととぎす通信の続きです。

今回は頂点カラーを使って三角形を描画してみます。
今までと違うのは、頂点データに色情報が入ってくるということです。

ということで、以下前回記事のソースコードからの変更箇所です。

  • 頂点データの構造体定義
  • 頂点データの全体サイズが変わるのでそれを反映
  • シェーダ内でも同様に頂点データ構造を定義して使用する

頂点データの構造体定義

前回まではVector3の配列で保持していたところをVertexDataという構造体で頂点データを定義しています。

頂点データの全体サイズが変わるのでそれを反映

構造体を定義したことで頂点サイズが変わります。 8行目のこの構造体のバイトサイズを取得できるようにして、それを使用します。

public static int SizeInBytes => System.Runtime.InteropServices.Marshal.SizeOf(typeof(VertexData));

この変数は頂点バッファをGPUにセットする際のVertexBufferBindingを生成する際に使用されます。

device.ImmediateContext.InputAssembler.SetVertexBuffers(
    0, new VertexBufferBinding(
        vertexBuffer, VertexData.SizeInBytes, 0)
);

シェーダ内でも同様に頂点データ構造を定義して使用する

// 座標と色情報の構造体
struct VertexData
{
    float4 position : SV_Position;
    float4 color : COLOR;
};
// 各シェーダで構造体を使用する
VertexData MyVertexShader(VertexData input){....}
float4 MyPixelShader(VertexData input) : SV_Target{...}

シェーダ内でも同様の構造体を定義して、頂点シェーダ、ピクセルシェーダ内で使用します。

全体コードは以下に貼っていますが、これを実行するとこのように頂点カラーが反映された三角形が表示されます。

f:id:esakun:20181114181218p:plain

全体コードはコチラ。

リスペクト