我正在使用XNA在C#中进行2D项目,我需要将一些灰度精灵渲染到Texture2D上 - 我正在切换渲染状态并使用精灵批处理并获得结果主要得益于其他stackoverflow帖子。我无法找到的是如何使用Alpha或Multiply之外的其他东西进行混合。
我正在寻找的结果相当于Photoshop中的Lighten混合模式 - 在纹理的内容和我正在绘制的精灵之间,我只想要比纹理绘制的纹理更亮的像素。我天真的方法是遍历源和目标中的像素数据。有一个很好的解决方案吗?
答案 0 :(得分:2)
如果您使用的是XNA 4.0,则可以将BlendState
对象传递给SpriteBatch.Begin
。
您想将BlendState.ColorBlendFunction
设置为BlendFunction.Max
。 The documentation列出了实际的混合函数。
为了达到您的效果,我想您还希望将ColorSourceBlend
和ColorDestinationBlend
设置为等于Blend.One
。
在早期版本的XNA中可能会出现同样的情况,但您必须在调用Begin之后和第一次调用Draw之前使用带有SpriteSortMode.Immediate
的SpriteBatch并修改GraphicsDevice.RenderState
的相应成员。
Read this blog post了解详情。