OpenGL ES学习(7)——混合
本文介绍使用是OpenGL ES 混合相关技术,它可以实现如现实世界中那样的半透明物体效果。
1.1 混合基本认识
混合技术就是将两个片元调和,将通过各项测试准备进入帧缓冲的片元(源片元)和原有片元(目标片元)按照设定的比例加权计算出最终片元的颜色值,不再是新片元直接覆盖缓冲中的目标片元。
如何计算两个片元的加权比例?OpenGL ES 2.0中设置混合因子来确定两片元的加权比例。
- 源因子:用于确定将进入帧缓冲的片元在最终片元的比例;
- 目标因子:用于确定原帧缓冲中的片元在最终片元中的比例;
OpenGL ES中一个颜色值包括4个色彩通道(r,g,b,a),上述两种因子都各有4个分量值。
混合计算公式:
- 假设源因子[Sr,Sg,Sb,Sa];目标因子[Dr,Dg,Db,Da];r,g,b,a下标分别表示红、绿、蓝、透明度。
- 假设源片元颜色值[Rs,Gs,Bs,As];目标片元颜色值[Rd,Gd,Bd,Ad]
混合后最终片元各个颜色通道值 = [ R s S r + R d D r , G s S g + G d D g , B s S b + B d D b , A s S a + A d D a ] 混合后最终片元各个颜色通道值 = [R~s~S~r~+R~d~D~r~,G~s~S~g~+G~d~D~g~,B~s~S~b~+B~d~D~b~,A~s~S~a~+A~d~D~a~] 混合后最终片元各个颜色通道值=[R s S r +R d D r ,G s S g +G d D g ,B s S b +B d D b ,A s S a +A d D a ]
1.2 源因子和目标因子
OpenGL ES为了简化处理不允许开发人员任意设置混合因子,而是系统预置了。常用的混合因子值如下表所示:
常量名 | RGB混合因子 | A混合因子 |
---|---|---|
GL_ZERO | [0,0,0] | 0 |
GL_ONE | [1,1,1] | 1 |
GL_SRC_COLOR | [Rs,Gs,Bs] | As |
GL_ONE_MINUS_SRC_COLOR | [1-Rs,1-Gs,1-Bs] | 1-As |
GL_DST_COLOR | [Rd,Gd,Bd] | Ad |
GL_ONE_MINUS_DST_COLOR | [1-Rd,1-Gd,1-Bd] | 1-Ad |
GL_SRC_ALPHA | [As,As,As] | As |
GL_ONE_MINUS_SRC_ALPHA | [1-As,1-As,1-As] | 1-As |
GL_DST_ALPHA | [Ad,Ad,Ad] | Ad |
GL_ONE_MINUS_DST_ALPHA | [1-Ad,1-Ad,1-Ad] | 1-Ad |
GL_SRC_ALPHA_SATURATE (只可以作源因子) |
[f,f,f] 其中f=min(As,1-Ad) |
1 |
常量名称中包含“SRC”的代表各通道来自源片元,有DST的代表各通道值来自目标片元。
两种常用的组合
- 源因子GL_SRC_ALPHA + 目标因子GL_ONE_MINUS_SRC_ALPHA ,可实现半透明遮挡效果
- 源因子GL_SRC_COLOR + 目标因子GL_ONE_MINUS_SRC_COLOR ,可实现滤光镜效果
1.3 混合代码API
//开启混合
GLES20.glEnable(GLES20.GL_BLEND);
//设置混合因子,滤光镜效果
GLES20.glBlendFunc(GLES20.GL_SRC_COLOR, GLES20.GL_ONE_MINUS_SRC_COLOR);
//设置混合因子,半透明遮挡效果
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA,GLES20.GL_ONE_MINUS_CONSTANT_ALPHA);//...
//关闭混合
GLES20.glDisable(GLES20.GL_BLEND);
1.4 混合demo
1.4.1 demo效果
1.4.2 完整demo
https://download.csdn.net/download/ITMonkeyKing/86504570
【参考】
- https://www.khronos.org/opengles/
- 《OpenGL ES应用开发实践指南 Android卷 Kevin Brothaler》
- https://en.wikipedia.org/wiki/OpenGL_ES
- https://developer.android.google.cn/guide/topics/graphics/opengl
- https://developer.android.google.cn/training/graphics/opengl
- Android3D游戏开发技术宝典OpenGL ES 2.0
OpenGL ES学习(7)——混合相关推荐
- IOS OpenGL ES GPUImage 滤色混合 GPUImageScreenBlendFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGl Es 学习(二):定义顶点和着色器
概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...
- IOS OpenGL ES GPUImage 遮罩混合 GPUImageMaskFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- IOS OpenGL ES GPUImage 柔光混合 GPUImageSoftLightBlendFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- IOS OpenGL ES GPUImage 排除混合 GPUImageExclusionBlendFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- IOS OpenGL ES GPUImage 图像混合 GPUImageNormalBlendFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- 【eoe特刊】第二十七期 OpenGL ES学习及项目解析
经过一个月征稿.编辑,新的一版特刊终于出炉了. 本次特刊的制作,改变以往的制作方式,完全取自网友的独自的风格. 在只有一个主题的前提下,完全是通过社区的热心的网友,根据自己的想法,自行设计,自由发挥, ...
- Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
最新文章
- PyQt5教程——组件 Ⅱ(八)
- 效率 qt_Qt开发之Go篇(三)
- 让产品有效迭代,前端A/B Testing的简单实现
- include_fns.php_一步一步教你用PHP+MySql筹建网站 No.3 管理页面_mysql
- 安装DNN时可能出现的错误
- Codeforces Round #660 (Div. 2)
- 两教授吐槽:如今博士研究生的论文写作水平为何如此堪忧?
- 【scala】IDEA运行scala程序:Error:scalac: bad option: ‘-make:transitive‘
- python编程(类变量和实例变量)
- Codevs 1215 迷宫
- [swift 进阶]读书笔记-第八章:错误处理 C8P3 带有类型的错误
- Python实战项目7个有趣的小游戏
- java qq 邮箱发送错误以及端口号
- TrueCrypt安装及其使用教程
- Unsupervised Domain Adaptation by Backpropagation
- 78岁老人爱上玩乐器硬是学会了吹奏萨克斯
- 前端RSA加密,加密字符串过长,提示“Message too long for RSA”问题
- 狮虎论:软件测试和软件开发到底哪个实际工资更高
- 梦想照进现实|CSDN 实体奖牌 第二期
- C语言教程(七):函数
热门文章
- win10下Remix-IDE桌面版一直在空白页面不变,File -> Open Folder,一直没反应
- 如何添加Iconfont图标到项目及创建新项目?
- [AcWing] 9. 分组背包问题(C++实现)分组背包问题模板题
- EXCEL保存时出现“由于共享冲突,您的更改不能保存到x‘x‘x‘x.xlsx0”解决方法
- 虚拟串口软件和串口调试助手的简单使用
- 打破校史!国家杰青发表顶级论文
- Anaconda中使用Jupyter Notebook
- Java实习生入职第一天
- strtotime()函数PHP时间格式转化
- Java基础入门(持续更新)