美文网首页
blend模式 cocos sprite

blend模式 cocos sprite

作者: 李偌闲 | 来源:发表于2019-03-08 21:14 被阅读0次

cocos creator 中sprite有个有意思的属性

| Blend Factor | 当前图像混合模式 |

| Dst Blend Factor | 背景图像混合模式,和上面的属性共同作用,可以将前景和背景 Sprite 用不同的方式混合渲染,

这两个的结合确实可以产生不少有意义的效果。

##Blend公式原理

OpenGL中的混合是通过这个方程来实现的:

C¯result=C¯source∗Fsource+C¯destination∗Fdestination

C¯sourceC¯source:源颜色向量。这是源自纹理的颜色向量。

C¯destinationC¯destination:目标颜色向量。这是当前储存在颜色缓冲中的颜色向量。

FsourceFsource:源因子值。指定了alpha值对源颜色的影响。

FdestinationFdestination:目标因子值。指定了alpha值对目标颜色的影响。

类似这样

使用源颜色向量的alpha作为源因子,使用1−alpha作为目标因子

 GL_ONE:1.0

  GL_ZERO:0.0

   GL_SRC_ALPHA:源的Alpha值作为因子

   GL_DST_ALPHA:目标Alpha作为因子

    GL_ONE_MINUS_SRC_ALPHA:1.0减去源的Alpha值作为因子

     GL_ ONE_MINUS_DST_ALPHA:1.0减去目标的Alpha值作为因子

glBlendFunc(GL_ZERO, GL_ONE)  第一个表示源因子,第二个表示目标因子

1.默认的状态下使用GL_ONE,GL_ONE_MINUS_SRC_ALPHA这两个参数,这也是我们看到的情况,Sprite会覆盖下面的描绘

2.设置glBlendFunc(GL_ONE,GL_ZERO), 表面完全使用源颜色,即和不混合一样的效果,但是如果Sprite本身有透明的地方,则透明的地方会变成黑色。因为此时不显示目标的颜色。即使透明度为0也没有意义。

2:如果设置glBlendFunc(GL_ZERO, GL_ONE),表示不使用源颜色,那么该Sprite便不被画出来。

常数相关因子融合因子结果


GL_ZERO    源因子或目的因子        (0,0,0,0)

GL_ONE    源因子或目的因子            (1,1,1,1)

GL_DST_COLOR        源因子            (Rd,Gd,Bd,Ad)

GL_SRC_COLOR        目的因子        (Rs,Gs,Bs,As)

GL_ONE_MINUS_DST_COLOR    源因子        (1,1,1,1)-(Rd,Gd,Bd,Ad)

GL_ONE_MINUS_SRC_COLOR    目的因子        (1,1,1,1)-(Rs,Gs,Bs,As)

GL_SRC_ALPHA            源因子或目的因子            (As,As,As,As)

GL_ONE_MINUS_SRC_ALPHA        源因子或目的因子(1,1,1,1)-(As,As,As,As)

GL_DST_ALPHA            源因子或目的因子            (Ad,Ad,Ad,Ad)

GL_ONE_MINUS_DST_ALPHA        源因子或目的因子        (1,1,1,1)-(Ad,Ad,Ad,Ad)

GL_SRC_ALPHA_SATURATE        源因子        (f,f,f,1); f=min(As,1-Ad


核心算法 就是 根据透明度来计算 如果因子为0就是不显示,为1就是完全显示,中间值就是有透明度两张图片有融合

根据公式推敲下渲染的结果:

1. 当目标和源因子都设置为GL_ZERO,无论混合方程怎样设置,最终肯定啥也没有。

2. 当源设置为GL_ONE,目标设置为GL_ZERO,方程设置为加还是减,最终应该渲染的就是目标的颜色,也就是之渲染出金币。

3. 当源设置为GL_ONE,目标设置为GL_SRC_COLOR,方程设置为加,根据公式最终颜色=(目标颜色*目标因子)+(源颜色*源因子),得到最终有颜色的区域必定是源alpha不为0的区域,因为源是作为目标因子的,源*目标,最终源中alpha为0的区域,这个结果也为0,也就是最终的结果区域透明了。

其他的都根据公式了。最终不同参数下的混合结果所示,1、2、3分别于图1、2、3对应。

猫是目标图片,金币是源

一个可以直接看效果的网站

https://www.andersriggelsen.dk/glblendfunc.php

一篇参考文章

https://www.jianshu.com/p/174dbf898684zhe

混合公式

https://blog.csdn.net/u010468553/article/details/79786497

https://www.cnblogs.com/kefeiGame/p/8202624.html

算法解释比较好的网站

https://blog.csdn.net/junzia/article/details/76580379

相关文章

网友评论

      本文标题:blend模式 cocos sprite

      本文链接:https://www.haomeiwen.com/subject/soidpqtx.html