2014-09-30 125 views
0

我在XNA上的图元有问题。正如您在链接http://imgur.com/12UTd2s中看到的那样,某些纹理墙壁是透明的,有些则不是。有人可以解释为什么发生这种情况,并帮助我想出一个解决方案?XNA纹理图元透明

这里的穿墙声明中看到:

testWall.Add(new VertexPositionNormalTexture(new Vector3(x2, 0, z2), new Vector3(1, 0, 0), new Vector2(0,0))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x2, 0, z2 - 50), new Vector3(1, 0, 0), new Vector2(1,0))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x2, 20, z2), new Vector3(1, 0, 0), new Vector2(0,1))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x2, 20, z2), new Vector3(1, 0, 0), new Vector2(0,1))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x2, 20, z2 - 50), new Vector3(1, 0, 0), new Vector2(1,1))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x2, 0, z2 - 50), new Vector3(1, 0, 0), new Vector2(1,0))); 

而这里的墙的声明我无法看透:

testWall.Add(new VertexPositionNormalTexture(new Vector3(x1, 0, z1 - 50), new Vector3(-1, 0, 0), new Vector2(0,1))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x1, 0, z1), new Vector3(-1, 0, 0), new Vector2(0,0))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x1, 20, z1 - 50), new Vector3(-1, 0, 0), new Vector2(1,1))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x1, 20, z1 - 50), new Vector3(-1, 0, 0), new Vector2(1,1))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x1, 20, z1), new Vector3(-1, 0, 0), new Vector2(1,0))); 
        testWall.Add(new VertexPositionNormalTexture(new Vector3(x1, 0, z1), new Vector3(-1, 0, 0), new Vector2(0,0))); 

剔除设置为无,X2,X1,Z1 ,z2是顶点位置。有什么想法吗?

谢谢

回答

2

的原因是不是因为他们看透,而是因为你没有启用深度缓冲,因此墙会出现在他们绘制顺序(底部到顶部) 。

渲染之前你要设置的渲染状态:

Renderer.GraphicsDevice.DepthStencilState = DepthStencilState.Default; 
+0

它的工作!感谢队友^^对不起,但我没有足够的声望,以upvote你的答案 – 2014-09-30 21:37:21