クワッドの描画に関する簡単な質問。私は現在使用しています:
GraphicsDevice.DrawPrimitives(PrimitiveType primitiveType,
int startVertex, int primitiveCount);
これにより、クワッドは完全にきれいに描画されますが、クワッドを機能させる唯一の方法は、クワッドに6つの頂点を使用することです(2つの三角形として描画します)。GPUに4つの頂点を供給し、動的頂点バッファーを保持できるかどうか疑問に思っています。
DrawUserIndexedPrimitives()を使用してこれを実行できることはわかっていますが、バッファーが必要です。;)
編集:必要ですか?必要な場合は、GPUに2つの三角形ごとに4つの頂点を供給していることをどこに伝えますか?現在、クワッドをnQuads * 6頂点として頂点バッファーに格納しており、GPUは3つの頂点ごとに三角形として使用します。したがって、4つの頂点に切り替えるだけで、次のようになります。
Quads: {v1,v2,v3,v4} {v5,v6,v7,v8} ...
Triangles: {v1,v2,v3} {v4,v5,v6} {v7,v8 ...}
三角数2は最初のクワッドから1つの頂点を使用し、番号3は2番目のクワッドから2つの頂点を使用するというように、これは良いことではありません。
編集2:申し訳ありませんが、実際には動的頂点バッファーを使用しています。
6つの頂点で大腿四頭筋を行う方法に関するコードを投稿します。
// ## CONSTRUCTION
// Setting up buffer and vertex holder.
particleVertexBuffer = new DynamicVertexBuffer(graphicsDevice,
ParticleQuad.VerticesSizeInBytes * nMaxParticles,
BufferUsage.WriteOnly);
particleVertices = new ParticleVertex[nMaxParticles * 6];
// ## ADD VERTICES
particleVertices[i].Set();
particleVertices[i+1].Set();
particleVertices[i+2].Set();
particleVertices[i+3].Set();
particleVertices[i+4].Set();
particleVertices[i+5].Set();
// ## SET BUFFER
particleVertexBuffer.SetData(particleVertices, 0, nMaxParticles * 6, SetDataOptions.NoOverwrite);
graphicsDevice.Vertices[0].SetSource(particleVertexBuffer, 0, ParticleVertex.SizeInBytes);
// ## DRAW
graphicsDevice.DrawPrimitives(PrimitiveType.TriangleList,
FirstUsedParticle * 6, ((LastUsedParticle - FirstUsedParticle)+1)* 2);
さて、私は循環キューやその他のものを使用しているので、もう少しありますが、これで十分に理解できます。