我有这样的执行:
graphics.GraphicsDevice.Clear(new Color(255, 0, 0, 0));
阿尔法是0.那么,为什么它吸引我红色?
graphics.GraphicsDevice.Clear(new Color(255, 0, 0, 255));
也绘制相同的红色。 更改Alpha值不会影响屏幕上的颜色。 为什么?
后缓冲区中的alpha值不会影响扫描到屏幕的内容。
但是它影响混合。 例如,非预乘alpha混合是:
output = source * sourceAlpha + destination * (1-sourceAlpha)
虽然上面仅使用源代码 alpha(给予您期望的“透明度”效果),但您也可以设置混合阶段以使用目标 alpha。 大多数理智的混合模式只使用源阿尔法 – 但使用目标阿尔法让你做一些有趣的特殊效果( 例如 )。
在XNA中,您可以通过创建BlendState
( MSDN )的实例来更改混合函数。
如果目标缓冲区是渲染目标,则目标缓冲区具有alpha值的另一个原因是。 当你使用渲染目标作为纹理时,存储在缓冲区中的阿尔法值将像你期望的纹理一样运行。