「MonoGameでハードウェアインスタンシングしてみる」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
11行目: | 11行目: | ||
== HLSL側を書く == | == HLSL側を書く == | ||
− | + | ワールド座標(ワールド空間内での位置や傾きなど)は、 | |
− | + | 一般的なシェーダーではユニフィード変数で受け取る。 | |
− | |||
float4x4 World; //これがワールド座標 | float4x4 World; //これがワールド座標 | ||
float4x4 View; | float4x4 View; | ||
float4x4 Projection; | float4x4 Projection; | ||
− | |||
− | + | 一方、ハードウェアインスタンシングを使う場合はダイナミック頂点バッファとして複数の値を受け取る。 | |
<source lang="hlsl"> | <source lang="hlsl"> | ||
float4x4 View; | float4x4 View; | ||
44行目: | 42行目: | ||
== C#側を書く == | == C#側を書く == | ||
− | + | まずインスタンスを格納するクラスを作る。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
public struct VertexDynamicInstance : IVertexType | public struct VertexDynamicInstance : IVertexType | ||
76行目: | 74行目: | ||
</source> | </source> | ||
− | + | ダイナミック頂点バッファを生成する。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
− | |||
var instanceVertexBuffer = new DynamicVertexBuffer(graphicsDevice, | var instanceVertexBuffer = new DynamicVertexBuffer(graphicsDevice, | ||
VertexDynamicInstance.VertexDeclaration, | VertexDynamicInstance.VertexDeclaration, | ||
84行目: | 81行目: | ||
BufferUsage.WriteOnly); | BufferUsage.WriteOnly); | ||
− | |||
instanceVertexBuffer.SetData(instances); | instanceVertexBuffer.SetData(instances); | ||
</source> | </source> |