我正在使用XNA 3.1
我最近使用Components.Add(myComponent)
为我的游戏创建了一个2D平视显示器(HUD)。 HUD看起来很好,显示了2D地图,十字准线和帧率计数器。问题是,每当HUD在屏幕上时,游戏中的3D对象就不再正确绘制。
距离我的玩家更远的东西可能会在接近一些东西后被吸引,当我走过它们时,模型有时会失去定义。当我移除HUD时,所有都被正常绘制。
我应该注意他们有关于此的任何已知问题吗?我该如何在3D游戏区域绘制2D HUD?
这是没有GameComponent
的情况:
以下是GameComponent
的外观(在这种情况下,它只是左上角的一些文字,显示帧率),注意后面的树是如何出现在树的前面靠近相机:
答案 0 :(得分:1)
您必须启用深度缓冲区:
// XNA 3.1
GraphicsDevice.RenderState.DepthBufferEnable = true;
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;
// XNA 4.0
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
SpriteBatch.Begin
改变了图形管道的状态:
在两个版本中,深度缓冲都被禁用,这就是导致问题的原因。
同样,我不能强调这一点:
在绘制任何几何图形之前,始终确保正确设置所有渲染状态。
在purpose of each state和渲染管道中的每个阶段进行自我教育。如果有疑问,请尝试将所有内容重置为默认值。