【问题标题】:XNA SpriteBatch causing problems with BasicEffectXNA SpriteBatch 导致 BasicEffect 出现问题
【发布时间】:2011-02-05 11:06:39
【问题描述】:

我正在使用 XNA 来可视化一些数据,我正在尝试使用广告牌来获取数据,并使用 spritebatch 来绘制 HUD 文本。

对于广告牌,我使用了以下示例,效果很好: http://create.msdn.com/en-US/education/catalog/sample/3d_audio

在该示例中,有一个猫和狗精灵,猫在狗的前面或后面经过,具体取决于它们的位置和您所期望的相机位置。调用 Cat.Draw 和 Dog.Draw 的顺序无关紧要。这些家伙来自 BasicEffect。

但是,如果我添加一个继承 DrawableGameComponent 并使用 SpriteBatch 的类,则其他组件中的 BasicEffect 将失去它的深度排序,并且按照调用的顺序绘制四边形。请注意,此组件是通过 this.Components.Add(...) 添加到 Game 类中的。

BasicEffect 和 SpriteBatch 是否不兼容?每当调用 SpriteBatch.Begin()/End() 时都会出现问题。如果我不称之为猫/狗渲染就好了。

有什么想法吗?

【问题讨论】:

    标签: xna


    【解决方案1】:

    您需要重置一些 SpriteBatch 更改的渲染状态。

    尝试在调用 basiceffect 之前设置这些:

    GraphicsDevice.BlendState = BlendState.Opaque;
    GraphicsDevice.DepthStencilState = DepthStencilState.Default;
    

    有关 SpriteBatch 更改哪些渲染状态的更多信息: http://blogs.msdn.com/b/shawnhar/archive/2010/06/18/spritebatch-and-renderstates-in-xna-game-studio-4-0.aspx

    【讨论】:

    • 非常感谢您指出这一点。由于我使用的是 XNA4,因此我必须关注您发布的文章顶部的 2010 更新链接。花了我 5 秒钟的时间,我的工作就像一个魅力。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多