Вершины вытягиваются на развертывании - xna
Вопрос
Ну, я создаю миноказующую ландшафт только для этого. Проблема, которую у меня есть, заключается в том, что если вы посмотрите на определенный угол, некоторые лица, которые на самом деле находятся позади других, нарисованы перед ними, тем самым не показывая фактических, которые есть. Как и Minecraft, у меня есть местность, разделенная на регионы, и когда построен вершина, выявлены только «внешние» лица. Это также по какой -то причине не рисует ни вершину, ни левые блоки. В дополнение ко всем этим проблемам лица, по -видимому, перекрываются (IE (можно увидеть только половину лица).
Вот как это выглядит (обратите внимание, я только рисую верхние лица, потому что я должен исправить другие): http://s1100.photobucket.com/albums/g420/darestium/?action=view¤t=minecraftliketerrain.png
Я также рисую все регионы одним из следующих методов (я использую файл эффекта Реймера, пока не могу написать свой собственный :):
public void Draw(Player player, World world)
{
effect.CurrentTechnique = effect.Techniques["TexturedNoShading"];
effect.Parameters["xWorld"].SetValue(Matrix.Identity);
effect.Parameters["xProjection"].SetValue(player.Camera.ProjectionMatrix);
effect.Parameters["xView"].SetValue(player.Camera.ViewMatrix);
effect.Parameters["xCamPos"].SetValue(player.Camera.Position);
effect.Parameters["xTexture"].SetValue(world.TextureAlias.SheetTexture);
effect.Parameters["xCamUp"].SetValue(player.Camera.UpDownRotation);
for (int x = 0; x < world.regions.GetLength(0); x++)
{
for (int y = 0; y < world.regions.GetLength(1); y++)
{
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
Region region = world.regions[x, y];
if (player.Camera.BoundingFrustum.Contains(region.BoundingBox) != ContainmentType.Disjoint)
{
device.SetVertexBuffer(region.SolidVertexBuffer);
//device.Indices = region.SolidIndices;
device.DrawPrimitives(PrimitiveType.TriangleList, 0, region.VertexCount);
//device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, region.VertexCount, 0, region.SolidIndices.IndexCount / 3);
}
}
}
}
}
Помощь была бы очень оценена, спасибо :)
Решение
Похоже, Z-буфер отключен. Попробуйте настройку:
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
Проблема с тем, что он не рисует верхние/левые блоки, о которых вы упоминаете, вероятно, является проблемой, связанной с вашим кодом генерации буфера вершины (если да, попробуйте задать другой вопрос конкретно об этой проблеме).