Я только недавно начал использовать XNA, и теперь я сталкиваюсь с проблемой новичков, производительностью.У нарисованных мною объектов есть свой собственный буфер вершин, поэтому, когда у меня есть ~ 50 тыс. Объектов, число кадров в секунду резко падает (с 60 до 5-12).
Я получил совет, что я должен объединить свои вершины в куски, но я не знаю, как это сделать ..
Буду признателен за любую помощь, которую я могу получить с примерами кода.
Редактировать: Это код, который я придумал, с помощьюБлау
var cubes = newChunk.Where(c => c != null && !badIndex.Contains(c.BlockType));
VertexPositionColorTextureNormal[] verts = new VertexPositionColorTextureNormal[cubes.Sum(c => c.Vertices.Count)];
int VertexOffset = 0;
var inTheRightOrder = cubes;
foreach (var cube in inTheRightOrder)
{
var cb = cube.Vertices.ToArray();
for (int v = 0; v < cb.Length; v++)
{
verts[VertexOffset + v] = cb[v];
}
VertexOffset += cb.Length;
}
VertexBuffer newVB = new VertexBuffer(device, VertexPositionColorTextureNormal.VertexDeclaration, verts.Length, BufferUsage.WriteOnly);
newVB.SetData(verts);
var ck = new Cube { Vertices = verts, BoundingBox = BoundingBox.CreateFromPoints(verts.Select(i => i.Position)), Buffer = newVB, Cubes = cubes.Count() };
Cubes.Add(ck);