XNA中类似Photoshop的混合模式的建议方法

时间:2010-11-11 04:43:59

标签: c# xna

我正在使用XNA在C#中进行2D项目,我需要将一些灰度精灵渲染到Texture2D上 - 我正在切换渲染状态并使用精灵批处理并获得结果主要得益于其他stackoverflow帖子。我无法找到的是如何使用Alpha或Multiply之外的其他东西进行混合。

我正在寻找的结果相当于Photoshop中的Lighten混合模式 - 在纹理的内容和我正在绘制的精灵之间,我只想要比纹理绘制的纹理更亮的像素。我天真的方法是遍历源和目标中的像素数据。有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

如果您使用的是XNA 4.0,则可以将BlendState对象传递给SpriteBatch.Begin

您想将BlendState.ColorBlendFunction设置为BlendFunction.MaxThe documentation列出了实际的混合函数。

为了达到您的效果,我想您还希望将ColorSourceBlendColorDestinationBlend设置为等于Blend.One

在早期版本的XNA中可能会出现同样的情况,但您必须在调用Begin之后和第一次调用Draw之前使用带有SpriteSortMode.Immediate的SpriteBatch并修改GraphicsDevice.RenderState的相应成员。

Read this blog post了解详情。