OpenGL学习笔记-Blending

  混合方程中,Csource是片段着色器输出的颜色向量(the color output of the fragment shader),其权重为Fsource。Cdestination是当前存储在color buffer中的颜色向量(the color vector that is currently stored in the color buffer),其权重为Fdestination。Csource和Cdestination由OpenGL自动设置,但Fsource和Fdestination需要由我们进行设置(The source and destination colors will automatically be set by OpenGL, but the source and destination factor can be set to a value of our choosing)。当OpenGL渲染一个片段时,会根据混合方程对上述两个颜色向量进行加权组合(whenever OpenGL renders a fragment, it combines the current fragment's color with the fragment color currently in the color buffer),Cresult是加权组合后的结果,将保存到color buffer中,并且会将Cdestination覆盖掉。

  要想实现混合的效果,需要先使能混合:

cpp 复制代码
glEnable(GL_BLEND);

  然后设置混合方程中的Fsource和Fdestination,一种常用的设置如下:

cpp 复制代码
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glBlendFunc函数的原型如下,上述设置的含义是:Fsource取Csource的alpha分量,Fdestination取(1-Csource的alpha分量)。

cpp 复制代码
void glBlendFunc(GLenum sfactor, GLenum dfactor);

  完成渲染后,需要将混合关闭:

cpp 复制代码
glDisable(GL_BLEND);

  一个简单的例子:图1是待混合的两个片段,图2是混合方程,图3是混合得到的结果。


相关推荐
GR904 天前
光线追踪-2:光线照射到物体表面后,反射的Radiance怎么求
图形渲染
yyt36304584110 天前
KLineChartQuant:GLSL 的精度问题及 RTC 解法
前端·vue.js·react.js·交互·图形渲染·webgl·数据可视化
拿我格子衫来11 天前
Beam Studio:矢量图与位图如何变成 G-code
图像处理·图形渲染
maybeyaluokenai11 天前
unity build in渲染管线概述
unity·图形渲染
DolitD12 天前
实时云渲染多应用并发:CELL容器技术突破3D隔离瓶颈
云原生·容器·实时互动·图形渲染·数据可视化
hele_two13 天前
C++模拟蚁群(二)
c++·算法·数学建模·图形渲染
郝学胜-神的一滴13 天前
CMake 047:解锁安装阶段自定义操作,告别配置阶段提前执行坑
运维·服务器·c++·游戏引擎·图形渲染·opengl
拿我格子衫来14 天前
LaserWeb4:矢量图与位图如何变成 G-code
图像处理·图形渲染
破竹1521 天前
OpenGL ES调试汇总
图形渲染·着色器
郝学胜-神的一滴25 天前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl