在XNA中绘制3D模型的顺序

时间:2011-09-28 16:17:40

标签: xna

我在XNA中以正确的顺序绘制3D模型时遇到了麻烦。

以下是描述问题的两张图片:

Pic1:http://imgur.com/wGPIk&L5AY1l 图2:http://imgur.com/wGPIkl&L5AY1

球向下移动,一旦它与地形相交,视角就会发生变化,看起来好像球在地形后面。

如果我改变了绘画的顺序,它看起来就像球一直在地形的顶部..

有人可以解释一下如何解决这个问题吗?

提前致谢

2 个答案:

答案 0 :(得分:10)

问题是SpriteBatch调用在角落里绘制你的FPS计数器。

SpriteBatch会更改图形设备的状态。每当您完成绘制2D对象(在这种情况下,左上角的帧速率计数器)时,您需要恢复设备状态。

致电SpriteBatch.End()后,请添加以下代码:

device.DepthStencilState = DepthStencilState.Default;

其中device是对您正在使用的当前GraphicsDevice的引用。

答案 1 :(得分:1)

这看起来像是一个ZBuffer问题。你检查过你的Zbuffer是否已启用并正常工作?试试David Lively所说的话。如果可行,请检查您是否未在SpriteBatch类的开始和End调用内绘制3D模型。 Begin准备用于绘制2D对象的设备,如果您现在尝试调用3D绘图,则此操作无效。 End确保为2D设置的所有内容都未设置并恢复到Begin调用之前的状态。