背后的顶点正在前方 - XNA

时间:2011-11-29 07:10:05

标签: xna draw vertex vertices zbuffer

好吧,我正在为它制造一个类似于我的地形的东西。我遇到的问题是,如果你看某个角度,实际上落后于其他面孔的一些面孔会被绘制在它们面前,因此不能显示那些存在的实际面孔。像我的世界一样,我将地形分隔成区域,并且当构建顶点缓冲区时,仅显示“外部”面。由于某种原因,它也不是绘制顶部或左侧块。除了所有这些问题之外,面孔似乎是重叠的,即(只能看到一半脸)

以下是它的样子(注意我只绘制了顶面,因为我必须修复其他面孔):http://s1100.photobucket.com/albums/g420/darestium/?action=view&current=minecraftliketerrain.png

我也使用以下方法一次性绘制所有区域(我使用reimer的效果文件,直到我可以自己编写:):

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); 
                    } 
                } 
            } 
        } 
    } 

非常感谢帮助,谢谢:)

1 个答案:

答案 0 :(得分:0)

看起来Z-buffer已被禁用。尝试设置:

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

你提到的没有绘制顶部/左侧块的问题可能与顶点缓冲区生成代码有关(如果是这样,请尝试另外询问有关该问题的问题)。