メインメニューを開く

差分

MonoGameでハードウェアインスタンシングしてみる

221 バイト追加, 2020年4月15日 (水) 05:58
== HLSL側を書く ==
ワールド座標(ワールド空間内での位置や傾きなど)は、[[ワールド座標]](ワールド空間内での位置や傾きなど)は、
一般的なシェーダーではユニフィード変数で受け取る。一般的な[[シェーダー]]では[[ユニフォーム変数]]で受け取る。<source lang="hlsl">
float4x4 World; //これがワールド座標
float4x4 View;
float4x4 Projection;
</source>
一方、ハードウェアインスタンシングを使う場合はダイナミック頂点バッファとして複数の値を受け取る。一方、[[ハードウェアインスタンシング]]を使う場合はダイナミック頂点バッファとして複数の値を受け取る。
<source lang="hlsl">
float4x4 View;
== C#側を書く ==
まずインスタンスを格納するクラスを作る。まず3Dモデルのインスタンス([[ワールド座標]])を格納する[[クラス]]を作る。
<source lang="csharp">
public struct VertexDynamicInstance : IVertexType
</source>
ダイナミック頂点バッファを生成する。インスタンス群を格納したダイナミック頂点バッファを生成する。
<source lang="csharp">
// ダイナミック頂点バッファを作って
var instanceVertexBuffer = new DynamicVertexBuffer(graphicsDevice,
VertexDynamicInstance.VertexDeclaration,
BufferUsage.WriteOnly);
// インスタンス群を入れ込む
instanceVertexBuffer.SetData(instances);
</source>