1

我正在使用 XNA 3.1

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

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

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

这是没有 a 的样子GameComponent

两个 3D 对象,较远的对象正确渲染在较近的对象后面

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

两个 3D 对象,较远的对象在较近的对象之上渲染

4

1 回答 1

2

您必须启用深度缓冲区:

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

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

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

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

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

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

  • 混合状态
  • 深度模板状态
  • 光栅化状态
  • 视口
  • 渲染目标
  • 着色器
  • 采样器状态
  • 纹理
  • 常数

了解渲染管道中每个状态和每个阶段的目的。如果有疑问,请尝试将所有内容重置为默认值。

于 2013-02-19T08:14:09.893 回答