【发布时间】:2013-02-18 14:41:22
【问题描述】:
我正在使用 XNA 3.1
我最近通过在我的游戏中使用Components.Add(myComponent) 创建了一个 2D 平视显示器 (HUD)。 HUD 看起来不错,显示 2D 地图、十字准线和帧率计数器。问题是,只要 HUD 在屏幕上,游戏中的 3D 对象就不再正确绘制。
离我的玩家更远的东西可能会在更近的东西之后被绘制,当我走过模型时,模型有时会失去定义。当我移除 HUD 时,一切都正常绘制。
他们是否有任何我应该注意的已知问题?我应该如何在我的 3D 游戏区域上绘制 2D HUD?
这就是没有GameComponent 的样子:
下面是 GameComponent 的样子(在这种情况下,它只是左上角屏幕外显示帧率的一些文本),注意后面的树是如何出现在靠近相机的树前面的:
【问题讨论】:
-
在 HUD 渲染代码中的某个地方,管道状态发生了变化,之后不会恢复。确保在绘制模型时设置了所有必要的状态。这包括混合/光栅化器/深度模板状态、视口、着色器、采样器、输入布局、深度缓冲区和渲染目标。您能否提供一个屏幕截图来缩小问题范围?
-
感谢您的回复。下班后我会提供截图。
-
在绘制模型之前尝试
GraphicsDevice.DepthStencilState = DepthStencilState.Default;。 -
GraphicsDevice.RenderState.DepthBufferEnable = true和GraphicsDevice.RenderState.DepthBufferWriteEnable = true是 XNA 3.1 的等效项。 -
是的,
SpriteBatch.Begin禁用深度缓冲区,因此您必须为每一帧重新启用它。很高兴我能帮助你!我明天会发布一个答案,这样就可以结束了。
标签: xna