【问题标题】:XNA MonoGame, Trouble rendering with bloomXNA MonoGame,Bloom 渲染问题
【发布时间】:2015-02-28 16:15:50
【问题描述】:

我正在尝试对游戏中的某些激光实现光晕效果,但遇到了一些问题。 首先,我将绽放应用于所有内容,如下所示:

    protected override void Draw(GameTime gameTime)
    {


        batch.Begin(SpriteSortMode.Texture, BlendState.Additive);
        bloom.BeginDraw();

        stateManager.Draw(gameTime, batch);

        batch.End();

        base.Draw(gameTime);
    }

效果很好,但当然,它看起来很糟糕,所以将它分成两个绘制调用,一个有绽放,一个没有,我尝试了这个:

    protected override void Draw(GameTime gameTime)
    {
        bloom.BeginDraw();
        GraphicsDevice.Clear(Color.Black);

        batch.Begin(SpriteSortMode.Texture, BlendState.Additive);

        stateManager.DrawBloomed(gameTime, batch);

        batch.End();

        base.Draw(gameTime);

        batch.Begin(SpriteSortMode.Deferred, BlendState.Additive);

        stateManager.Draw(gameTime, batch);

        batch.End();

        base.Draw(gameTime);

    }

但是,现在一切都变黑了。 谁能指出我为什么会发生这种情况以及我“真正”应该如何解决这个问题?

【问题讨论】:

    标签: c# monogame bloom


    【解决方案1】:

    您的州经理是否致电GraphicsDevice.Clear()?如果是这样,它每次都会清除屏幕,从而消除您之前的所有渲染。

    你应该每次调用一次base.Draw(),所以删除中间的那个。如果 base.Draw() 正在清除屏幕,这也会导致问题,所以要么删除调用,要么将其放在方法的开头。

    您的第二批应该是添加剂吗?我本来希望它是 alpha 混合或不透明的。

    如果以上方法都不能解决您的问题,请将代码发布到 stateManager.Draw()、将代码发布到 stateManager.DrawBloomed()、您的基类代码(如果它是非 XNA 类)和截图预期的结果。

    【讨论】:

    • 首先,不,代码中的其他任何地方都没有调用 GraphicsDevice.Clear()。其次,我发布的所有代码都来自 XNA 的默认主类,它扩展了 xna.Framework.Game stateManager.Draw() 只是查看当前状态并在那里调用 Draw 方法,并传递参数。从那里它只是 batch.Draw(Texture2D, ... ) 我在实现这个时参考了这个教程:[Tuts+ XNA 教程][1] 谢谢你的回答!
    • 关于混合模式,你是绝对正确的。对于激光,它应该是 AlphaBlend,对于其他精灵,它应该是不透明或 AlphaBlend。我变得绝望并尝试了所有组合......
    • 上面的链接出错了,这里是:gamedevelopment.tutsplus.com/tutorials/…
    • 当你移除bloom.BeginDraw()时你会得到渲染吗?如果是这样,您的问题是 bloom.BeginDraw() 正在设置您在执行其余混合之前未重置的值。至少,当我以前使用 XNA 时,这是我遇到过的问题。
    • 另外,根据您链接的文章,所有非开花绘图都发生在 调用 base.Draw() 之后,因此请删除您的第二次调用。最终,最好的办法是了解如何直接在 XNA 中使用着色器并编写自己的实现。你会发现这比将这个bloom代码塞进你的需要更容易,这可能最终需要一个渲染目标等来实现你想要的最终结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多