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{...}
シェーダ内でも同様の構造体を定義して、頂点シェーダ、ピクセルシェーダ内で使用します。
全体コードは以下に貼っていますが、これを実行するとこのように頂点カラーが反映された三角形が表示されます。
全体コードはコチラ。