2011-11-29 44 views
0

那么,我正在创造一个Minecraft地形的东西只是为了它。我面临的问题是,如果你从某个角度看,一些实际上在别人背后的面孔被绘制在他们面前,因此不会显示出真实的面部。就像我的世界一样,我将地形分成不同的区域,当建立顶点缓冲区时,只显示“外”面。这也是由于某种原因,不是画出顶部或左边的图块。除了所有这些问题,面部似乎都是重叠的(即只有一半的面部可以看到)后面的顶点正在盈方 - XNA

下面是它的样子(注意:我只绘制顶面,因为我必须修复其他面):http://s1100.photobucket.com/albums/g420/darestium/?action=view&current=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); 
        } 
       } 
      } 
     } 
    } 

帮助将不胜感激谢谢:)

+0

你的'RasterizerState'设置了什么? –

回答

0

看起来像t他的Z缓冲区被禁用。尝试设置:

GraphicsDevice.DepthStencilState = DepthStencilState.Default; 

它不拉丝顶/左块,你提到的问题,可能是一个问题,与你的顶点缓冲区生成代码(如果是的话,试着问一个问题特别有关的问题)。

+0

非常感谢,解决了这个问题:),是的,我已经检查并重新检查了我的“面部”代码,对我来说,它似乎应该起作用,就像你建议我将另一个话题放在这个主题上。 非常感谢,Darestium – Darestium