こんにちは、エンジニアのオオバです。
あわせて読みたい記事
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{...}
シェーダー内でも同様の構造体を定義して、頂点シェーダー、ピクセルシェーダー内で使用します。
全体コードは以下に貼っていますが、これを実行するとこのように頂点カラーが反映された三角形が表示されます。
全体コードはコチラ。
VertexColor.cs · GitHub
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
もくじ
リスペクト
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Windows8.1
- SlimDX 2.0.13.43