「MonoGameでハードウェアインスタンシングしてみる」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の2版が非表示) | |||
| 11行目: | 11行目: | ||
== HLSL側を書く == | == HLSL側を書く == | ||
[[ワールド座標]](ワールド空間内での位置や傾きなど)は、 | |||
一般的な[[シェーダー]]では[[ユニフォーム変数]]で受け取る。 | |||
<source lang="hlsl"> | |||
float4x4 World; //これがワールド座標 | float4x4 World; //これがワールド座標 | ||
float4x4 View; | float4x4 View; | ||
float4x4 Projection; | float4x4 Projection; | ||
</source> | |||
一方、[[ハードウェアインスタンシング]]を使う場合はダイナミック頂点バッファとして複数の値を受け取る。 | |||
<source lang="hlsl"> | <source lang="hlsl"> | ||
float4x4 View; | float4x4 View; | ||
| 42行目: | 44行目: | ||
== C#側を書く == | == C#側を書く == | ||
まず3Dモデルのインスタンス([[ワールド座標]])を格納する[[クラス]]を作る。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
public struct VertexDynamicInstance : IVertexType | public struct VertexDynamicInstance : IVertexType | ||
| 74行目: | 76行目: | ||
</source> | </source> | ||
インスタンス群を格納したダイナミック頂点バッファを生成する。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
// ダイナミック頂点バッファを作って | |||
var instanceVertexBuffer = new DynamicVertexBuffer(graphicsDevice, | var instanceVertexBuffer = new DynamicVertexBuffer(graphicsDevice, | ||
VertexDynamicInstance.VertexDeclaration, | VertexDynamicInstance.VertexDeclaration, | ||
| 81行目: | 84行目: | ||
BufferUsage.WriteOnly); | BufferUsage.WriteOnly); | ||
// インスタンス群を入れ込む | |||
instanceVertexBuffer.SetData(instances); | instanceVertexBuffer.SetData(instances); | ||
</source> | </source> | ||