【发布时间】:2011-09-29 00:28:25
【问题描述】:
我在 XNA 中以正确的顺序绘制 3D 模型时遇到问题。
这里有两张描述问题的图片:
图1:http://imgur.com/wGPIk&L5AY1l 图2:http://imgur.com/wGPIkl&L5AY1
球正在向下移动,一旦它与地形相交,视角就会发生变化,因此看起来好像球在地形后面。
如果我改变绘制顺序,它看起来就像球一直在地形之上..
谁能解释一下如何解决这个问题?
提前致谢
【问题讨论】:
标签: xna
我在 XNA 中以正确的顺序绘制 3D 模型时遇到问题。
这里有两张描述问题的图片:
图1:http://imgur.com/wGPIk&L5AY1l 图2:http://imgur.com/wGPIkl&L5AY1
球正在向下移动,一旦它与地形相交,视角就会发生变化,因此看起来好像球在地形后面。
如果我改变绘制顺序,它看起来就像球一直在地形之上..
谁能解释一下如何解决这个问题?
提前致谢
【问题讨论】:
标签: xna
问题在于 SpriteBatch 调用将您的 FPS 计数器绘制在角落。
SpriteBatch 改变图形设备的状态。每当您绘制完 2D 对象(在本例中为左上角的帧速率计数器)时,您都需要恢复设备状态。
调用SpriteBatch.End()后,添加这段代码:
device.DepthStencilState = DepthStencilState.Default;
其中device 是对您正在绘制的当前GraphicsDevice 的引用。
【讨论】:
这看起来像是 ZBuffer 问题。您是否检查过您的 Zbuffer 已启用并正常工作?试试大卫莱弗利所说的。如果可行,请检查您没有在 Begin 和 SpriteBatch 类的 End 调用中绘制 3D 模型。
Begin 准备好绘制 2D 对象的设备,如果您现在尝试调用 3D 绘图,这将无法正常工作。 End 确保为 2D 设置的所有内容都未设置并恢复到 Begin 调用之前的状态。
【讨论】: