【问题标题】:Draw order of 3D-Models in XNA在 XNA 中绘制 3D 模型的顺序
【发布时间】:2011-09-29 00:28:25
【问题描述】:

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

这里有两张描述问题的图片:

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

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

如果我改变绘制顺序,它看起来就像球一直在地形之上..

谁能解释一下如何解决这个问题?

提前致谢

【问题讨论】:

    标签: xna


    【解决方案1】:

    问题在于 SpriteBatch 调用将您的 FPS 计数器绘制在角落。

    SpriteBatch 改变图形设备的状态。每当您绘制完 2D 对象(在本例中为左上角的帧速率计数器)时,您都需要恢复设备状态。

    调用SpriteBatch.End()后,添加这段代码:

    device.DepthStencilState = DepthStencilState.Default;
    

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

    【讨论】:

    • @dsk 我花了几天时间寻找同样的问题。你能接受我的回答吗?我喜欢积分!
    • 太棒了,这终于解释了为什么我的模型看起来像垃圾!
    【解决方案2】:

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

    【讨论】:

    • 最初遇到这个问题的时候,我还以为是z-buffer的问题。 (而且,从技术上讲,确实如此)。 +1,但 SpriteBatch 不会恢复整个图形状态。它是权力与便利性的妥协之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2020-08-19
    • 2016-05-10
    相关资源
    最近更新 更多