graphics.GraphicsDevice.Clear奇怪的结果(XNA)

我有这样的执行:

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值的另一个原因是。 当你使用渲染目标作为纹理时,存储在缓冲区中的阿尔法值将像你期望的纹理一样运行。