绘制2D HUD会让我的3D模型渲染变得混乱?

时间:2013-02-18 14:41:23

标签: xna

我正在使用XNA 3.1

我最近使用Components.Add(myComponent)为我的游戏创建了一个2D平视显示器(HUD)。 HUD看起来很好,显示了2D地图,十字准线和帧率计数器。问题是,每当HUD在屏幕上时,游戏中的3D对象就不再正确绘制。

距离我的玩家更远的东西可能会在接近一些东西后被吸引,当我走过它们时,模型有时会失去定义。当我移除HUD时,所有都被正常绘制。

我应该注意他们有关于此的任何已知问题吗?我该如何在3D游戏区域绘制2D HUD?

这是没有GameComponent的情况:

two 3D objects, the one further away is correctly rendered behind the closer one

以下是GameComponent的外观(在这种情况下,它只是左上角的一些文字,显示帧率),注意后面的树是如何出现在树的前面靠近相机:

two 3D objects, the one further away is rendered on top of the closer one

1 个答案:

答案 0 :(得分:1)

您必须启用深度缓冲区:

// XNA 3.1
GraphicsDevice.RenderState.DepthBufferEnable = true;
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;

// XNA 4.0
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

SpriteBatch.Begin改变了图形管道的状态:

在两个版本中,深度缓冲都被禁用,这就是导致问题的原因。

同样,我不能强调这一点:

在绘制任何几何图形之前,始终确保正确设置所有渲染状态。

  • BlendState
  • DepthStencilState
  • RasterizerState
  • 视口
  • RenderTargets
  • 着色
  • SamplerStates
  • 纹理
  • 常量

purpose of each state和渲染管道中的每个阶段进行自我教育。如果有疑问,请尝试将所有内容重置为默认值。