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是混合得到的结果。


相关推荐
好家伙VCC3 天前
# 发散创新:用 Rust构建高并发虚拟世界引擎核心模块在当今游戏开发与元宇宙构建中,**虚拟世界的性能瓶颈往往不是图形渲染,而是底
java·开发语言·python·rust·图形渲染
懒洋洋在睡觉6 天前
Vulkan demo入门教程三:逻辑设备、队列与交换链
c++·图形渲染
wangzy19826 天前
一个高效稳定的多边形三角化算法(支持自交和孤岛检测)
算法·图形渲染
不吃鱼的猫7488 天前
【从零开始学 OpenGL:现代图形渲染实战】第02篇-渲染管线与第一个三角形
图形渲染
不吃鱼的猫7488 天前
【从零开始学 OpenGL:现代图形渲染实战】第03篇-深入着色器与GLSL
图形渲染·着色器
懒洋洋在睡觉8 天前
鸿蒙 6.0横屏显示时画面旋转错误
华为·图形渲染·harmonyos
不吃鱼的猫7488 天前
【从零开始学 OpenGL:现代图形渲染实战】第01篇-环境搭建与第一个窗口
图形渲染
玖釉-10 天前
解密图形渲染的性能原罪 —— Draw Call
c++·windows·图形渲染
small-pudding11 天前
深入理解PDF:蒙特卡洛光线追踪中的概率密度函数
算法·pdf·图形渲染
子辰ToT1 个月前
LearnOpenGL——PBR(三)漫反射辐照度
笔记·图形渲染·opengl