关于Sprite的blend混合模式的问题

creator版本:2.4.3
发布平台:未发布,测试项目

问题描述:
最近在研究sprite组件的blend混合模式,阅读了链接 https://docs.cocos.com/creator/manual/zh/advanced-topics/ui-auto-batch.html 中对blend模式的描述,然后通过文档链接 https://docs.cocos.com/creator/manual/zh/components/sprite.html 找到了图像混合模式预览参考链接 https://www.andersriggelsen.dk/glblendfunc.php 配合文档和该预览工具的使用,理解了混合模式,但是通过cocos creator上自己动手设置混合模式,发现效果和预览工具上的效果完全不一样,本来认为已经理解的内容全部被推翻,不知道是自己设置的问题还是引擎bug。

预览工具如下图:


红框1:选择的source图片
红框2:选择的destination图片
红框3:设置srcBlendFactor为GL_ONE
红框4:设置dstBlendFactor为GL_ZERO
红框5:设置显示模式为RGBA(色值以及透明度全部显示)
显示效果:符合文档中图像混合公式。

cocos creator中效果如下:


scene上有两张图片,一个是background,一个是半透绿色图片green


当设置图片green的混合模式srcBlendFactor为SRC_ALPHA,dstBlendFactor为ONE_MINUS_SRC_ALPHA时,显示正常。


然后设置green的混合模式srcBlendFactor不变,仍然为SRC_ALPHA,dstBlendFactor改为ZERO,结果就变成了图片上显示的样子,green的半透效果没有了。


将srcBlendFactor改为ONE,仍然没有透明度了,只是颜色变为了纯绿。

是我哪儿设置的有问题还是我理解的有问题,background本来就是不透明的,我将green的dstBlendFactor设置为ZERO,为什么会对green的透明度产生影响???求各位大神解惑。

“设置green的混合模式srcBlendFactor不变,仍然为SRC_ALPHA,dstBlendFactor改为ZERO”

按照你这么设置,计算公式如下:
(sColor x sAlpha) + (dColor x 0)=sColor x sAlpha

因为你的图片是半透明的,所以sAlpha是一个0-1之间的小数,sColor x sAlpha就是一个比原来的绿色更暗的绿色,和引擎的效果是一致的。

你觉得半透明效果没有了,是因为dColor x 0=0,dColor是背景图片的颜色,被你设置成0,也就是说背景图片的颜色完全被屏蔽掉了,当然看不出来。

总之,我感觉你没搞懂透明效果到底是怎么产生的,要透出下面的内容,并不是仅仅把上面的图片alpha值改小就可以的,真正决定能不能透出下面的内容,透多少,还是由公式决定的。

finalColor = sColor x sMode+ dColor x dMode

只要dMode不为0,就多多少少能透出下面的内容,可是你偏偏改成0,当然就不透了。