Monogame精灵alpha混合

时间:2015-03-01 12:58:03

标签: c# monogame alphablending spritebatch

目前,我正在使用2D网格的地形纹理,我使用标准的XNA / Monogame spritebatch.Draw()函数绘制。为了在相邻但不同的地形纹理之间实现更平滑的过渡,我想在一个区域(例如3x3)中围绕中心纹理混合纹理。相邻纹理越远,它对最终图像的影响就越小。

例如,(1,1)处中心纹理周围的(3x3)加权矩阵weight看起来像这样:

0.3 0.5 0.3
0.5 1.0 0.5
0.3 0.5 0.3

基本上,一个简单的问题。但是,我目前对提供的不同混合模式及其功能感到惊讶。我最初的想法是将BlendState.AlphaBlend

一起使用
spriteBatch.Draw(Tex2D, TargetRec, new Color(Color.White, weight[x,y] / SumOfWeights));

白色应该给我原始的纹理颜色,最终加起来为1的alpha值weight[x,y] / SumOfWeights。相反,我得到的是一个非常明亮的图像加上背景照射。

当将着色颜色设置为与Alpha通道具有相同值的灰色时,可以获得更好的结果。但是,当使用2个以上的纹理时,背景仍然很明显。

我的观念一定存在系统性错误,但我暂时无法找到它。请指出我的错误&提前谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个:

spriteBatch.Draw(Tex2D, TargetRec, Color.White * weight[x,y]);

当SpriteBatch使用预乘时,这是透明地绘制事物的正确方法。使用预乘时绘制时,Alpha通道的工作方式不同。您需要进行的基本更改是将颜色乘以透明度,而不是设置颜色的Alpha通道。

以下是一些更多信息。 http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx

相关问题