SpriteBatch中的乘法模式

我有一个“照明”纹理(黑色背景,白色或灯光颜色),我想画一个多元化的操作。 SpriteBatch.Begin可以指定BlendState.Additive ,但是没有BlendState.Multiplicative

我也尝试了这个答案的解决scheme,但它并没有工作 – 即使当我(错误地?)改变了代码使用XNA 4样式ColorDestinationBlend ,我结束了最后的解决scheme被倒置(黑色的地方,光是,一切都可见)。

我最初想到了一个着色器,但是我无法使用着色器与MonoGame一起工作,所以我又回到了SpriteBatch

创建你自己的BlendState,例如:

 BlendState blend = new BlendState(); blend.ColorBlendFunction = BlendFunction.Add; blend.ColorSourceBlend = Blend.DestinationColor; blend.ColorDestinationBlend = Blend.Zero; 

这将导致out.rgb = source.rgb * destination.rgb + 0;

由提问者编辑:我必须也设置绘图模式为SpriteSortMode.Immediate在这之前工作。