【问题标题】:configuring SpriteSortMode and BlendState配置 SpriteSortMode 和 BlendState
【发布时间】:2024-01-14 22:38:01
【问题描述】:

我正在绘制精灵批次,从背景中的事物开始并以前景结束。

我希望能够使用任何颜色和透明度,或者如果它可以使其更快,则可能是任何颜色和一个非常微弱的给定透明度。我需要能够在光照下绘制深色,以及在深色或类似阴影上绘制浅色,但颜色彼此不同。

最好使用什么 SpriteSortMode 和 BlendState?

我正在考虑 SpriteSortMode.Deferred,因为一切都按照我希望它呈现的顺序和 BlendState.NonPremultiplied 进行,尽管我不确定 NonPremultiplied 是什么意思。

【问题讨论】:

    标签: c# xna rendering alphablending


    【解决方案1】:

    当您调用 sprite batch.end 时,Deffered 会按照您调用 draw 的顺序渲染所有纹理。所以这对你来说是最好的。

    SpriteSortMode.Deferred

    假设您使用的是内容处理器,您可能需要 BlendState.AlphaBlend。如果您使用的是 Texture2D.FromStream,请使用 BlendState.NonPremultiplied。

    BlendState.NonPremultiplied

    【讨论】:

    • “spriteBatch.Draw(Texture2D...”是内容处理器还是FromStream?
    • 是的,NonPremultiplied 作品,AlphaBlend 没有,例如在 AlphaBlend 中,白色透明的东西看起来是白色和实心的,tyvm。
    • 通过处理器或流,我的意思是你如何从磁盘上获取纹理。如果您将图像添加到内容项目并通过 Content.Load("asset") 将其加载,则处理器将默认预乘 alpha。如果你使用 Texture2d.FromStream() 那么它会在没有预乘 alpha 的情况下加载磁盘上的纹理。