OpenGL ES混合效果介绍

原创 2018年04月17日 09:44:49

       本文内容为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个方块重叠部分为白色,和绿色方块重叠部分为淡蓝色,其余部分分别为红,绿,蓝色为本次混合结果。最终结果效果如上图。

    

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

OpenGL ES中混合的使用 (2012-08-02 )

在OpenGL中绘制的时候,有时候想使新画的颜色和已经有的颜色按照一定的方式进行混合,比如想使物体拥有半透明的效果,或者绘制叠加光亮的效果,这时候就要用到glBlendFunc()函数。 拿半透明效果...
  • aiwusheng
  • aiwusheng
  • 2013年05月01日 21:39
  • 1074

OpenGL ES混合Blend

OpenGL开发中经常需要在物体外层再绘制一层,但是又不能覆盖地面的那层事物,相当于透明效果。这种情况可以使用Blend(混合)技术来实现,使用方法如下: //开启混合 GLES20.glEnable...
  • w2865673691
  • w2865673691
  • 2015年11月26日 11:40
  • 1734

OpenGL ES 光照效果

一个立方体 光照模型 环境光 散射光 镜面光为了演示光照效果,在前面学习过的内容基础上我们首先创建一个立方体,同时为了看起来直观一些,这个立方体每个面采用中心为白色,周围红色的渐变方案,不然看上去同样...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016年10月24日 22:54
  • 2085

android opengl es 混合效果

Activity类 package sim.feel; import android.app.Activity; import android.content.res.Resources; im...
  • Simdanfeg
  • Simdanfeg
  • 2011年03月20日 11:31
  • 2664

OpenGL ES基本概念介绍

最近不太忙,打算这周开始学习下OpenGL,网上也已经有好多关于OpenGL的书籍和资料了。至于为什么还要写,是为了养成一个良好的学习习惯,也算给自己的学习过程做一个总结。          基...
  • wangkuifeng0118
  • wangkuifeng0118
  • 2012年04月03日 10:23
  • 6092

学习OpenGL ES之教你制作迷雾

原理 雾效果的制作并不需要额外的几何体或者是粒子发射器,当然如果可以配合一些粒子效果会更好。雾的实现主要依赖于修改已有模型的颜色,根据渲染的顶点与观察者的距离,将雾的颜色与当前颜色混合。下面是2...
  • qq_40201300
  • qq_40201300
  • 2017年10月07日 20:07
  • 161

Android中使用OpenGL ES实现纹理贴图以及实现多重纹理混合

OpenGL ES中最常用的纹理是2D纹理,也就是一个图像的二维数组,当我们使用纹理时,需要使用纹理坐标作为纹理图像中的索引。纹理坐标用(s, t)指定,或者(U, V)。纹理坐标如下图所示,纹理原点...
  • lb377463323
  • lb377463323
  • 2017年03月21日 17:48
  • 3718

OpenGL使用混合来实现半透明效果 .

原文地址:http://heroxx.blog.163.com/blog/static/5423580200908113124143/ 今天介绍关于OpenGL混合的基本知识。混合是一种常用...
  • u014386971
  • u014386971
  • 2014年03月29日 14:48
  • 1395

【Android开发学习16】Android OpenGL ES 关于glDrawArrays和glDrawElements

引用一段网上的话: For both, you pass OpenGL some buffers containing vertex data. glDrawArrays is basically...
  • ypist
  • ypist
  • 2013年02月22日 16:21
  • 3940

Android OpenGL ES学习笔记之材质概念和添加光照

一、光照概念 观察一个真实的3D物体,在不同的部位必然有不同的光照效果,有的地方暗一点,有的地方亮一点。而这种视觉差异是由光源和材质(物体的材料)共同决定的。光源强度由红、绿、蓝三色光强度共同决定,...
  • qq_31530015
  • qq_31530015
  • 2016年08月10日 10:33
  • 3711
收藏助手
不良信息举报
您举报文章:OpenGL ES混合效果介绍
举报原因:
原因补充:

(最多只允许输入30个字)