2010-09-21 118 views
5

我没有看到RenderState作为GraphicsDevice类中的成员,这是用于禁用深度缓冲区的功能的地方。任何人都知道这是如何完成这个新的4.0 API?如何禁用深度缓冲区?

这将是伟大的,如果我能以某种方式访问​​一个完整的RenderState类的地方。GraphicsDevice似乎已经得到了一些,但几乎没有!

回答

2

啊..我会将GraphicsDevice.DepthStencilState设置为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

是的。但请确保您创建一次状态对象(不在您的绘图方法中)。阅读肖恩的详细信息http://blogs.msdn.com/b/shawnhar/archive/2010/04/02/state-objects-in-xna-game-studio-4-0.aspx。 – Empyrean 2010-09-22 01:51:42

+1

还要记住,有许多预构建的状态对象涵盖了许多常见的场景。在这种情况下,您可以使用DepthStencilState.None来禁用深度缓冲,并使用DepthStencilState.Default来启用写入(如本例中所示)。 – 2011-11-11 19:48:16