В настоящее время я преобразовываю 2D-игру в 3D, никогда не работая с 3D, прежде чем пытаюсь учиться, когда я иду. Мне интересно, что лучший способ использовать буферы вершин/индексов.XNA Buffer Best Practice
В настоящее время я перебираю сетку и создаю набор буферов для каждого типа плитки, которые затем используются в методе рисования. Im предполагая, что я не должен использовать несколько наборов вершинных буферов, но не знаю другого способа сделать это, поскольку каждая плитка - это другая текстура.
Сетка петля
for (int i = Convert.ToInt32(xPos/2) - 30; i < Convert.ToInt32(xPos/2) + 30; i++)
{
for (int a = Convert.ToInt32(yPos/2); a < Convert.ToInt32(yPos/2) + 50; a++)
{
if (mapXtile > 0 && mapYtile > 0 && mapXtile < Globals.mapsizex && mapYtile < Globals.mapsizey)
{
int currentTile = Globals.levelArray[level, mapXtile, mapYtile].TyleType;
if (currentTile == tyleType.grass)
{
createCubeVertices(i * 2, a * 2, 1, 0f, count, grassVertices);
SetUpBufferIndices(count, grassIndices);
count++;
}
if (currentTile == tyleType.water)
{
createCubeVertices(i * 2, a * 2, 1, 0f, count, waterVertices);
SetUpBufferIndices(count, waterIndices);
waterCount++;
}
}
mapYtile = mapYtile + 1;
//mapYtile++;
}
mapXtile = mapXtile + 1;
mapYtile = Convert.ToInt32(yPos/2);
}
CopyToBuffers(grassVertices, grassIndices);
CopyToWaterBuffers(waterVertices, waterIndices);
код Розыгрыш
foreach (EffectPass pass in grassEffect.CurrentTechnique.Passes)
{
pass.Apply();
device.Indices = myIndexBuffer;
device.SetVertexBuffer(myVertexBuffer);
device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, grassVertices.Length, 0, grassIndices.Length/3);
}
foreach (EffectPass pass in mouseEffect.CurrentTechnique.Passes)
{
pass.Apply();
device.Indices = myWaterIndexBuffer;
device.SetVertexBuffer(myWaterVertexBuffer);
device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 10000, 0, 10000);
}
Любой совет высоко ценится.