OpenGL 颜色混合

348 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情


  1. Swift Optional
  2. Swift Enum
  3. iOS开发 做一个三角形
  4. Swfit 指针类型
  5. Swift 属性(下)
  6. Swift 属性
  7. Swift 小结
  8. Swift 类与结构体(下)
  9. Swift 类的生命周期
  10. Swift 类的初始化器
  11. Swift 类与结构体
  12. OpenGL 压缩纹理
  13. OpenGL 隧道坐标计算
  14. 0penGL 像素格式及数据类型
  15. OpenGL 纹理对象
  16. OpenGL 纹理
  17. OpenGL 模型变化
  18. OpenGL 视图
  19. OpenGL 矩阵
  20. OpenGL 向量
  21. OpenGL 颜色混合
  22. OpenGL 深度测试的潜在风险
  23. OpenGL 浅析深度测试
  24. OpenGL 浅析隐藏面消除
  25. OpenGL 图元连接方式
  26. 记WKWebView与HTML完成交互两三事
  27. OpenGL 渲染流程图解析
  28. OpenGL 控制你的正方形
  29. OpenGL 专业名词解释
  30. 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代表常量颜色(默认黑色)

2.png

混合韩式经常用于实现在其他一些不透明的物体前面绘制一个透明物体的效果。