2011-09-28 39 views
3

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

下面是描述该问题的两个图像:

PIC1:http://imgur.com/wGPIk&L5AY1l PIC2:http://imgur.com/wGPIkl&L5AY1

球向下,一旦它相交的地形移动,透视正在发生变化,使它看起来就好像球在地形后面一样。

如果我改变描绘顺序,它看起来像球是在地形上所有的时间的顶部..

可有人请解释如何解决这个问题?

在此先感谢

回答

10

的问题是SpriteBatch调用,吸引你的FPS计数器在角落里。

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

调用SpriteBatch.End()后,添加以下代码:

device.DepthStencilState = DepthStencilState.Default; 

其中device是当前GraphicsDevice你与绘制的参考。

+1

完全没有把戏:)非常感谢你! – dsk

+0

@dsk我花了几天时间找回相同的问题。你能接受我的回答吗?我喜欢积分! –

+0

我不得不等待4分钟才能接受;) – dsk

1

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

+0

当我最初遇到这个问题时,我认为它也是一个z缓冲区问题。 (从技术上讲,这是)。 +1,但SpriteBatch不会恢复整个图形状态。其中的一种权力与方便的妥协。 –