【OpenGL】七、混合

编程入门 行业动态 更新时间:2024-10-25 18:36:23

【<a href=https://www.elefans.com/category/jswz/34/1768567.html style=OpenGL】七、混合"/>

【OpenGL】七、混合

混合

文章目录

  • 混合
    • 混合公式
    • glBlendFunc(混合函数)
    • glBlendFuncSeparate
    • 渲染半透明纹理
  • 参考链接


混合(Blending)通常是实现物体透明度(Transparency)的一种技术
简而言之:混合就是如何将输出颜色目标缓冲区颜色结合起来。


混合公式

C_final = f_source * C_source op f_destination * C_destination。
  • 输入片段的颜色和Alpha通常称为源颜色分量和源Alpha目标像素的颜色和Alpha则称为目标颜色分量和目标Alpha
  1. f_source是输入片段(源)的混合因子;
  2. C_source是输入片段(源)的颜色;
  3. C_source是输入片段(源)的颜色;
  4. C_destination是目标像素(目标)的颜色;
  5. op是混合运算符,可以是GL_FUNC_ADD(前后两项相加),GL_FUNC_SUBTRACT(前后两项相减),GL_FUNC_REVERSE_SUBTRACT(前后两项相减,但顺序相反)。

glBlendFunc(混合函数)

中文版参数显示不全,建议看英文版或者docs.gl

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR)
glBlendEquation(GL_FUNC_ADD) //默认相加
  • 源颜色 W(0.3,0.4,0.7,0.5)
  • 目标颜色: X(0.8,0.2,0.3,0.1)
  • GL_SRC_ALPHA:取
  • 最终结果为 (0.5,0.5,0.5,0.5) * W(0.3,0.4,0.7,0.5) +
    (1-0.8,1-0.2,1-0.3,1-0.1) * X(0.8,0.2,0.3,0.1)


glBlendFuncSeparate

就是通过四个分量设置

void glBlendFuncSeparate(	
GLenum srcRGB,
GLenum dstRGB,
GLenum srcAlpha,
GLenum dstAlpha);

渲染半透明纹理

  • 先渲染不透明物体
  • 再按顺序渲染半透明物体

如何排序?
按照相机位置到物体位置的距离大小来排序。

关于是否使用深度写入的问题?

  • 如果透明物体不交叉重叠,可以不用深度写入

参考链接

可视化混合函数

docs.gl

Blend

更多推荐

【OpenGL】七、混合

本文发布于:2023-12-03 20:29:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657317.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:OpenGL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!