OpenGL ES混合效果介绍

       本文内容为OpenGL ES混合效果的初级介绍。理解的比较浅,各位看官轻喷。

概念

       所谓混合,就是把 输入片元的颜色值当前存储在帧缓存中的像素颜色值 合并起来。

       下面介绍4个名词:

        1、源颜色

                输入片元的颜色值。

        2、目标颜色

                当前存储在帧缓存中的像素颜色值。

        3、源因子

                混合计算时,源颜色的乘法因子(积数)。

        4、目标因子

                混合计算时,目标颜色的乘法因子。

        注意:源颜色和目标颜色只和绘制的顺序有关,和绘制的位置无关,不是画在最上面的就是源颜色。(本人学习时有此误解,所以特意的写出来)。算式

算式    

   源颜色:S = (sr, sg, sb, sa);
   目标颜色:D = (dr, dg, db, da);
   源因子:SD = (sdr, sdg, sdb, sda);
   目标因子:DD = (ddr, ddg, ddb, dda);
   混合结果 = (sr * sdr + dr * ddr, sg * sdg + dg * ddg,
sb * sdb + db * ddb, sa * sda + da * dda);

因子参数

          GL_ZERO = (0, 0, 0, 0)
         GL_ONE = (1, 1, 1, 1)
         GL_SRC_COLOR =(sR, sG, sB, sA)
         GL_DST_COLOR =(dR, dG, dB, dA)
         GL_ONE_MINUS_SRC_COLOR =(1-sR, 1-sG, 1-sB, 1-sA)
         GL_ONE_MINUS_DST_COLOR =(1-dR, 1-dG, 1-dB, 1-dA)
         GL_SRC_ALPHA =(sA, sA, sA, sA)
         GL_DST_ALPHA =(dA, dA, dA, dA)
         GL_ONE_MINUS_SRC_ALPHA =(1-sA, 1-sA, 1-sA, 1-sA)
         GL_ONE_MINUS_DST_ALPHA =(1-dA, 1-dA, 1-dA, 1-dA)
         GL_SRC_ALPHA_SATURATE =(i, i, i, 1 ) //i取值为min(sA, 1-dA)
案例

         源因子:GL_ONE

         目标因子:GL_ONE

         3个颜色方块绘制顺序:红、绿、蓝


        
说明:(注:以下说的第几次绘制都是在1帧内的操作,不要误解为多帧
背景颜色本例中设置为黑色(0, 0, 0, 1)
第一次绘制红色方块时,帧缓存为背景颜色,源颜色为红色方块,目标颜色为背景颜色。所以红色方块就是第一次的混合结果。
第二次绘制绿色方块时,帧缓存为上一次混合的结果。源颜色为绿色方块,目标颜色为第一次混合结果。所以和红色方块重合部分是黄色,不重合部分分别为红色和绿色是本次混合结果。
第三次绘制蓝色方块时,帧缓存为上一次的混合结果。源颜色为蓝色方块,目标颜色为第二次混合结果。所以3个方块重叠部分为白色,和绿色方块重叠部分为淡蓝色,其余部分分别为红,绿,蓝色为本次混合结果。最终结果效果如上图。

    

    以上为本文全部内容,各位大神在浏览过程中如果发现错误,请留言指导,本人会及时改正,谢谢观看。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页