如何禁用深度缓冲区?

5

我在GraphicsDevice类的成员中没有看到RenderState,这个类曾经用于禁用深度缓冲区。有人知道如何在新的4.0 API中实现吗?

如果能够访问完整的像RenderState一样的类就太好了。虽然GraphicsDevice似乎已经包含了部分功能,但还远远不够!

1个回答

2

啊..我需要设置GraphicsDevice.DepthStencilState为一个实例,其中任意数量的属性已被设置。好像RenderState被分解成了一堆其他状态。我之前在GraphicsDevice里找这些单独的属性,但现在它们似乎更好地组织在一起,方便管理状态。

depthState = new DepthStencilState();
depthState.DepthBufferEnable = true; /* Enable the depth buffer */
depthState.DepthBufferWriteEnable = true; /* When drawing to the screen, write to the depth buffer */

GraphicsDevice.DepthStencilState = depthState;

1
是的。但请确保只创建一次状态对象(不要在您的绘制方法中创建)。详见Shawn的博客:http://blogs.msdn.com/b/shawnhar/archive/2010/04/02/state-objects-in-xna-game-studio-4-0.aspx。 - Empyrean
1
请记住,有许多预构建的状态对象可涵盖许多常见情况。在这种情况下,您可以使用DepthStencilState.None来禁用深度缓冲,并使用DepthStencilState.Default来启用写入(如此处示例所示)。 - Cole Campbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接