持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
- Swift Optional
- Swift Enum
- iOS开发 做一个三角形
- Swfit 指针类型
- Swift 属性(下)
- Swift 属性
- Swift 小结
- Swift 类与结构体(下)
- Swift 类的生命周期
- Swift 类的初始化器
- Swift 类与结构体
- OpenGL 压缩纹理
- OpenGL 隧道坐标计算
- 0penGL 像素格式及数据类型
- OpenGL 纹理对象
- OpenGL 纹理
- OpenGL 模型变化
- OpenGL 视图
- OpenGL 矩阵
- OpenGL 向量
- OpenGL 颜色混合
- OpenGL 深度测试的潜在风险
- OpenGL 浅析深度测试
- OpenGL 浅析隐藏面消除
- OpenGL 图元连接方式
- 记WKWebView与HTML完成交互两三事
- OpenGL 渲染流程图解析
- OpenGL 控制你的正方形
- OpenGL 专业名词解释
- OpenGL 环境搭建 - MacOS
我们把OpenGL渲染时会把颜色值存在颜色缓冲区中,每个片段的深度值也是放在深度缓冲区。当深度缓冲区被关闭时,新的颜色将简单的覆盖原来颜色缓冲区存在的颜色值,当深度缓冲区再次打开时,新的颜色片段只是当时他们比原来的值更接近邻近的裁剪平面才会替换原来的颜色片段。
那么,如果开启深度测试后,在两个重叠的图层中,有一个图层是半透明的,有一个图层是非半透明的。此时就不能进行单纯的 比较 深度值,然后进行覆盖。而是需要将两个图层的颜色进行混合:
glEnable(GL_BLEND);
目标颜色:已经存储在颜色缓冲区的颜色值; 源颜色:作为当前渲染命令结果进入颜色缓冲区的颜色值。
固定着色器/可编程着色器 -> 使用开关方式 -> 颜色混合(单纯的两个图层重叠进行混合) 可编程着色器 -> 片元着色器 -> 处理图片原图颜色+薄薄的绿色(颜色值) -> 进行颜色混合方程式计算 -> 套用公式
当混合功能被启动时,源颜色和目标颜色的组合方式是混合方程式控制的。
当混合功能被启动时,源颜色和目标颜色的组合方式是混合方程式控制的。在默认情况下,混合方程式如下:
Cf = (Cs * S) + (Cd * D)
Cf : 最终计算参数的颜色
Cs : 源颜色
Cd : 目标颜色
S : 源混合因子
D : 目标混合因子
设置混合因子
设置混合因子,需要用到 glBlendFun 函数
glBlendFunc(GLenum S, GLenum D);
S: 源混合因子
D: 目标混合因子
其中R、G、B、A分别代表红、绿、蓝、alpha。
标中下标S、D,分别代表源、目标
其中C代表常量颜色(默认黑色)