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

あわせて読みたい記事

C#でDirectX11 FPSを管理する

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

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

頂点データの構造体定義

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

PositionAndColorStruct.cs · GitHub

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

構造体を定義したことで頂点サイズが変わります。
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{...}  

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

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

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

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

→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

リスペクト

オススメ記事
検証環境