Opengl es2.0 学习笔记(九)颜色混合
文章目录
- 一.不启用的效果
- 二、开启混合
- 三.混合方式
- 四.举例:
一.不启用的效果
//需要传入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.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...
- ROS学习笔记九:用C++编写ROS发布与订阅
ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...
- iOS OpenGL ES2.0教程 Lesson03 旋转
iOS OpenGL ES2.0教程 Lesson03 旋转 注:可供翻译的课程只有前两课.从这节课起,我试着根据我对OpenGL ES的理解写接下去的课程,希望能和大家一起学习. 在上节课中 ...
- Zabbx6.0(学习笔记)
Zabbx6.0(学习笔记) 目录导航 Zabbx6.0(学习笔记) 一.为什么 需要监控系统 二.如何选择监控 三.Zabbix概述 四.Zabbix安装哪个版本? Zabbix安装要求 1.硬件 ...
- OpenGL超级宝典学习笔记——操作矩阵
为了更强大的功能和灵活性,我们有时需要直接操作矩阵.在OpenGL中4x4的矩阵用包含16个浮点数值的一维数组来表示,而不是用二维的4x4的数组来表示.OpenGL之所以这么做,因为使用一维数组更高效 ...
- JavaScript学习笔记(九)(验证框架,layer弹出层)
JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...
- OpenCV学习笔记(九)——图像轮廓(下)
<OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...
- 初识 OpenGL ES2.0
原文链接:Android OpenGLES2.0(一)--了解OpenGLES2.0 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API ...
- OpenGL ES2.0 – Iphone开发指引
原文链接地址:http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial 免责申明(必读!):本博客提供的所有教程的翻译原稿 ...
- Polyworks脚本开发学习笔记(九)-公差控制及制作报告
Polyworks脚本开发学习笔记(九)-公差控制及制作报告 定义公差 系统有默认的公差设置,可以在选项中进行系统的默认设置,但往往不是想要的.比如下图的XYZ三向都是-/+1,我想只控制Y向并且公差 ...
最新文章
- 读redux源码总结
- 第八讲 一阶常系数线性ODE(续)
- 大一计算机上机试题2017,2017历年全国计算机二级ACCESS上机试题及答案
- mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值
- python爬取天气数据山东_Python的学习《山东省各城市天气爬取》
- lia人是什么意思_69年属鸡人终身灾难是什么意思
- Django源代码阅读分析-2:持久层结构分析
- Exchange server 2003迁移到2010无路由组连接器
- 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
- 软件开发中的需求文档由谁来编写_使用 RStudio 中的 Rmarkdown 编写演示文档
- java中斗地主发牌程序代码_java模拟实现斗地主发牌小程序
- (03)两个模型的交集、并集、差集
- AutoPostBack
- opencv访问图像中每个像素的值
- 2021年web前端开发视频教程零基础自学HTML/VUE/JS全栈项目实战全套课程
- 通信算法之九:4FSK调制解调仿真链路
- 感应熔炼设备市场现状及未来发展趋势分析
- Linux使用nvida-smi查看GPU类型
- ugui 转轮_(转)unity3D的FingerGestures插件
- matlab显示图像全黑,请教!彩色图像显示出来怎么是全黑的?