文章目录

  • 一.不启用的效果
  • 二、开启混合
  • 三.混合方式
  • 四.举例:

一.不启用的效果

 //需要传入GL_RGBAfmt     =   GL_RGBA;glTexImage2D( GL_TEXTURE_2D,      //! 指定是二维图片0,                  //! 指定为第一级别,纹理可以做mipmap,即lod,离近的就采用级别大的,远则使用较小的纹理fmt,                //! 纹理的使用的存储格式width,              //! 宽度,老一点的显卡,不支持不规则的纹理,即宽度和高度不是2^n。height,             //! 宽度,老一点的显卡,不支持不规则的纹理,即宽度和高度不是2^n。0,                  //! 是否的边fmt,                //! 数据的格式,bmp中,windows,操作系统中存储的数据是bgr格式GL_UNSIGNED_BYTE,   //! 数据是8bit数据pixels);

当我们调用函数去画纹理时候

修改像素shader,丢弃a值 小于0.2的像素

            "precision  lowp float; ""uniform    sampler2D   _texture;\n""varying    vec4        _outColor;\n""varying    vec2        _outUV;""void main()""{""   vec4   color   =   texture2D(_texture,_outUV);""   if(color.a < 0.2)""       discard;""   gl_FragColor   =   color * _outColor;""}"

如此绘制,看到我们的边缘特别生硬。

二、开启混合

我们可以使用混合,让它软化,然它开起来自然。混合是在片元操作里发生的。

要使用OpenGL的混合功能,只需要调用:glEnable(GL_BLEND);即可。
要关闭OpenGL的混合功能,只需要调用:glDisable(GL_BLEND);即可。

   glEnable(GL_BLEND);//最小a值运算glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);//在OpenGL中,默认是没有开启深度检测的,也就是说,后绘制的//物体覆盖先绘制的物体(颜色缓冲区中,先绘制的物体 被 后绘制的物体 覆盖)。glEnable(GL_DEPTH_TEST);

启用深度测试,我们画的东西就会有深度,否则后画的,会把先画的覆盖掉。

三.混合方式

//源因子和目标因子

  • sfactor
    指定红绿蓝和 alpha 源混合因子如何计算。初始值为GL_ONE。 接受了九个符号常量: GL_ONE_MINUS_DST_ALPHA,GL_ZERO GL_ONE,GL_DST_COLOR GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA 和 GL_SRC_ALPHA_SATURATE。
  • dfactor
    指定红绿蓝和 alpha 目标混合因子如何计算。初始值为GL_ZERO。 接受了八个符号常量: GL_ZERO GL_ONE,GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR,GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA,和 GL_ONE_MINUS_DST_ALPHA。
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

参数详细说明:

  • GL_ZERO: 表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。
  • GL_ONE: 表示使用1.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值来作为因子。

四.举例:

1)您还可以使用 glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ),其对于以任意顺序渲染反锯齿点和线也是非常有用的。

2)若要优化的多边形消除锯齿,可使用从最远到最近存储多边形的混合函数 glBlendFunc ( GL_SRC_ALPHA_SATURATE, GL_ONE )。 目的 alpha 位平面存储累积的覆盖,必须使用这个平面以使这个混合函数正确进行操作。

3)如果设置了glBlendFunc(GL_ONE, GL_ZERO);,则表示完全使用源颜色,完全不使用目标颜色,因此画面效果和不使用混合的时候一致(当然效率可能会低一点点)。如果没有设置源因子和目标因子,则默认情况就是这样的设置。

4)如果设置了glBlendFunc(GL_ZERO, GL_ONE);,则表示完全不使用源颜色,因此无论你想画什么,最后都不会被画上去了。(但这并不是说这样设置就没有用,有些时候可能有特殊用途)
如 果设置了glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);,则表示源颜色乘以自身的alpha 值,目标颜色乘以1.0减去源颜色的alpha值,这样一来,源颜色的alpha值越大,则产生的新颜色中源颜色所占比例就越大,而目标颜色所占比例则减 小。这种情况下,我们可以简单的将源颜色的alpha值理解为“不透明度”。这也是混合时最常用的方式。
如果设置了glBlendFunc(GL_ONE, GL_ONE);,则表示完全使用源颜色和目标颜色,最终的颜色实际上就是两种颜色的简单相加。例如红色(1, 0, 0)和绿色(0, 1, 0)相加得到(1, 1, 0),结果为黄色。

Opengl es2.0 学习笔记(九)颜色混合相关推荐

  1. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

  2. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  3. iOS OpenGL ES2.0教程   Lesson03 旋转

    iOS OpenGL ES2.0教程    Lesson03  旋转 注:可供翻译的课程只有前两课.从这节课起,我试着根据我对OpenGL ES的理解写接下去的课程,希望能和大家一起学习. 在上节课中 ...

  4. Zabbx6.0(学习笔记)

    Zabbx6.0(学习笔记) 目录导航 Zabbx6.0(学习笔记) 一.为什么 需要监控系统 二.如何选择监控 三.Zabbix概述 四.Zabbix安装哪个版本? Zabbix安装要求 1.硬件 ...

  5. OpenGL超级宝典学习笔记——操作矩阵

    为了更强大的功能和灵活性,我们有时需要直接操作矩阵.在OpenGL中4x4的矩阵用包含16个浮点数值的一维数组来表示,而不是用二维的4x4的数组来表示.OpenGL之所以这么做,因为使用一维数组更高效 ...

  6. JavaScript学习笔记(九)(验证框架,layer弹出层)

    JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...

  7. OpenCV学习笔记(九)——图像轮廓(下)

    <OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...

  8. 初识 OpenGL ES2.0

    原文链接:Android OpenGLES2.0(一)--了解OpenGLES2.0 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API ...

  9. OpenGL ES2.0 – Iphone开发指引

    原文链接地址:http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial 免责申明(必读!):本博客提供的所有教程的翻译原稿 ...

  10. Polyworks脚本开发学习笔记(九)-公差控制及制作报告

    Polyworks脚本开发学习笔记(九)-公差控制及制作报告 定义公差 系统有默认的公差设置,可以在选项中进行系统的默认设置,但往往不是想要的.比如下图的XYZ三向都是-/+1,我想只控制Y向并且公差 ...

最新文章

  1. 读redux源码总结
  2. 第八讲 一阶常系数线性ODE(续)
  3. 大一计算机上机试题2017,2017历年全国计算机二级ACCESS上机试题及答案
  4. mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值
  5. python爬取天气数据山东_Python的学习《山东省各城市天气爬取》
  6. lia人是什么意思_69年属鸡人终身灾难是什么意思
  7. Django源代码阅读分析-2:持久层结构分析
  8. Exchange server 2003迁移到2010无路由组连接器
  9. 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
  10. 软件开发中的需求文档由谁来编写_使用 RStudio 中的 Rmarkdown 编写演示文档
  11. java中斗地主发牌程序代码_java模拟实现斗地主发牌小程序
  12. (03)两个模型的交集、并集、差集
  13. AutoPostBack
  14. opencv访问图像中每个像素的值
  15. 2021年web前端开发视频教程零基础自学HTML/VUE/JS全栈项目实战全套课程
  16. 通信算法之九:4FSK调制解调仿真链路
  17. 感应熔炼设备市场现状及未来发展趋势分析
  18. Linux使用nvida-smi查看GPU类型
  19. ugui 转轮_(转)unity3D的FingerGestures插件
  20. matlab显示图像全黑,请教!彩色图像显示出来怎么是全黑的?

热门文章

  1. 系统论的应用——心理学
  2. WPS Word 快捷键大全
  3. C64+DSP资源手册笔记
  4. 2017 上海车牌(沪牌)标书购买攻略
  5. 数据压缩算法该如何选择?
  6. 因算法裁定“效率低下”,近150名员工遭解雇
  7. 性能优化实战-sql递归查询效率低下
  8. [Python GUI]Python内置图形界面tkinter Eye-Hand Coordination--游戏实战1
  9. 基于微信的买菜小程序 毕业设计毕业论文 开题报告和效果图(基于微信小程序毕业设计题目选题课题)
  10. JAVA求素数和模拟条件