`
v5qqcom
  • 浏览: 1360207 次
文章分类
社区版块
存档分类
最新评论

OpenGL函数思考-glBlendFunc

 
阅读更多

OpenGL函数思考-glBlendFunc

函数原型:

void glBlendFunc(GLenum sfactor,GLenum dfactor)
参数说明:

  • sfactor:源颜色系融合方法,可取如下值GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, and GL_SRC_ALPHA_SATURATE
  • dfactor:目标颜色融合方法,可取如下值GL_ZERO, GL_ONE, GL_SCR_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_DST_ALPHA, and GL_ONE_MINUS_DST_ALPHA

函数说明:

在RGB模式下,可以使用把引入的RGBA值(源)与帧缓存中的RGBA值(目标)相融合的融合函数来绘制像素。缺省时,融合是关闭的,可以使用glEnable(GL_BLEND)来激活融合。

当激活融合时,可以使用glBlendFunc函数定义融合操作。

OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜 色。(也可以不是相加,新版本的OpenGL可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等,但我们这里为了简单起见,不讨 论这个了)
下面用数学公式来表达一下这个运算方式。假设源颜色的四个分量(指红色,绿色,蓝色,alpha值)是(Rs, Gs, Bs, As),目标颜色的四个分量是(Rd, Gd, Bd, Ad),又设源因子为(Sr, Sg, Sb, Sa),目标因子为(Dr, Dg, Db, Da)。则混合产生的新颜色可以表示为:
(Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da)
当然了,如果颜色的某一分量超过了1.0,则它会被自动截取为1.0,不需要考虑越界的问题。

源因子和目标因子是可以通过glBlendFunc函数来进行设置的。glBlendFunc有两个参数,前者表示源因子,后者表示目标因子。这两个参数可以是多种值,下面介绍比较常用的几种。
GL_ZERO: 表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。
GL_ONE: 表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算。
GL_SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
GL_DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
GL_ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。
除 此以外,还有GL_SRC_COLOR(把源颜色的四个分量分别作为因子的四个分量)、GL_ONE_MINUS_SRC_COLOR、 GL_DST_COLOR、GL_ONE_MINUS_DST_COLOR等,前两个在OpenGL旧版本中只能用于设置目标因子,后两个在OpenGL 旧版本中只能用于设置源因子。新版本的OpenGL则没有这个限制,并且支持新的GL_CONST_COLOR(设定一种常数颜色,将其四个分量分别作为 因子的四个分量)、GL_ONE_MINUS_CONST_COLOR、GL_CONST_ALPHA、 GL_ONE_MINUS_CONST_ALPHA。另外还有GL_SRC_ALPHA_SATURATE。新版本的OpenGL还允许颜色的alpha 值和RGB值采用不同的混合因子。

举例来说:
如果设置了glBlendFunc(GL_ONE, GL_ZERO);,则表示完全使用源颜色,完全不使用目标颜色,因此画面效果和不使用混合的时候一致(当然效率可能会低一点点)。如果没有设置源因子和目标因子,则默认情况就是这样的设置。
如果设置了glBlendFunc(GL_ZERO, GL_ONE);,则表示完全不使用源颜色,因此无论你想画什么,最后都不会被画上去了。(但这并不是说这样设置就没有用,有些时候可能有特殊用途)
如果设置了glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);,则表示源颜色乘以自身的alpha 值,目标颜色乘以1.0减去源颜色的alpha值,这样一来,源颜色的alpha值越大,则产生的新颜色中源颜色所占比例就越大,而目标颜色所占比例则减 小。这种情况下,我们可以简单的将源颜色的alpha值理解为“不透明度”。这也是混合时最常用的方式。
如果设置了glBlendFunc(GL_ONE, GL_ONE);,则表示完全使用源颜色和目标颜色,最终的颜色实际上就是两种颜色的简单相加。例如红色(1, 0, 0)和绿色(0, 1, 0)相加得到(1, 1, 0),结果为黄色。
注意:
所谓源颜色和目标颜色,是跟绘制的顺序有关的。假如先绘制了一个红色的物体,再在其上绘制绿色的物体。则绿色是源颜色,红色是目标颜色。如果顺序反过来,则 红色就是源颜色,绿色才是目标颜色。在绘制时,应该注意顺序,使得绘制的源颜色与设置的源因子对应,目标颜色与设置的目标因子对应。不要被混乱的顺序搞晕 了。

分享到:
评论

相关推荐

    OpenGl所有函数库

    "OpenGl函数库.doc"和"opengl函数.doc"则是关于OpenGL函数的文档,同样提供了函数的描述和用法。 四、学习和使用 掌握OpenGL函数库的关键在于理解和实践。开发者应通过阅读文档、教程和示例代码,了解每个函数的...

    opengl-function.rar_OpenGL函数库

    OpenGL函数库是图形编程领域中的一个关键组成部分,它为开发者提供了丰富的接口,用于在各种操作系统上创建复杂的2D和3D图形。这个“opengl-function.rar”压缩包包含了一个名为“opengl-function.CHM”的离线帮助...

    OpenGLES demo - 7. Alpha Blend

    通常使用`glBlendFunc()`函数来指定混合函数,例如`glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)`,这使得源颜色的alpha值与目标颜色的互补alpha值相乘后进行混合。 在这个OpenGLES demo中,我们可能还会...

    OpenGL 系列函数库

    OpenGL函数库,作为计算机图形学领域的一个重要组成部分,其设计旨在提供一套标准接口,用于高效地渲染2D和3D图形。在理解OpenGL时,掌握其函数命名规则至关重要,这有助于开发者快速识别函数功能和参数类型。根据...

    openGL函数查询

    ### OpenGL函数查询知识点详解 #### 一、GL库函数与颜色管理 - **`glshadeModel`**: 用于选择平面明暗模式(GL_FLAT)或光滑明暗模式(GL_SMOOTH)。这两种模式决定了如何计算多边形表面上的颜色变化。 - **`...

    OpenGL函数库API

    ### OpenGL函数库API详解 #### 一、OpenGL函数库概览 OpenGL(Open Graphics Library)是一种广泛使用的跨语言、跨平台的应用程序接口(API),主要用于渲染2D和3D矢量图形。它采用C语言风格编写,具有丰富的图形...

    opengl函数库 最全

    OpenGL函数库是图形编程的重要组成部分,它提供了丰富的接口来实现3D图形的渲染。这个最全的函数库几乎包含了OpenGL的所有核心功能,使得开发者能够创建复杂的3D场景、动画以及进行高级图像处理。 1. `glAccum`:此...

    OpenGl函数介绍哦

    ### OpenGL函数介绍 #### 一、OpenGL库函数概述 OpenGL是一种跨语言、跨平台的应用程序接口(API),用于渲染2D、3D矢量图形。它由一系列的库函数组成,这些函数允许开发者进行图形处理和显示。在开发基于OpenGL的...

    OpenGL函数介绍

    ### OpenGL函数介绍 #### 一、概述 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它使用一种特殊的C语言风格,提供了丰富的库函数来进行图形处理和...

    OpenGL函数查询

    ### OpenGL函数查询详解 #### GL库函数概览 **OpenGL** 是一种用于渲染2D、3D图形的应用程序接口(API)。它广泛应用于游戏开发、虚拟现实(VR)技术、科学可视化等领域。以下是对给定内容中部分GL库函数的详细解析。 ...

    OpenGl核心函数库

    8. **状态管理**:OpenGL有大量用于设置渲染状态的函数,如`glEnableVertexAttribArray`、`glDepthFunc`和`glBlendFunc`,这些函数控制着深度测试、混合模式、视口设置等。 9. **错误检查**:`glGetError`函数用于...

    OpenGL函数参考手册

    OpenGL函数参考手册是一份详尽的资源,涵盖了OpenGL编程所需的大量信息。OpenGL是跨语言、跨平台的图形程序接口,广泛用于渲染2D、3D矢量图形,尤其是在科学可视化、虚拟现实等领域扮演着重要角色。手册的目的是帮助...

    OpenGL函数库

    (6)特殊效果函数,如 glBlendFunc()、glHint() 和 glFog*() 等。 (7)光栅化、象素操作函数,如 glRasterPos*()、glLineWidth()、glPolygonMode()、glReadPixel() 和 glCopyPixel() 等。 (8)选择与反馈函数,...

    OpenGL 常见函数功能查询

    **glBlendFunc**: 设置混合函数。 - **功能描述**:用于定义如何混合颜色。 **glHint**: 提示OpenGL优化目标。 - **功能描述**:给出性能提示,指导OpenGL优化渲染过程。 **glFog**: 设置雾化效果。 - **功能描述*...

    android OpenGL常用函数

    ### Android OpenGL常用函数详解 #### 一、OpenGL概述 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它在计算机图形学领域中有着广泛的应用,特别是...

    常用的OpenGL的函数

    融合函数 glBlendFunc()、反走样函数 glHint()和雾化效果 glFog*()。 (7)光栅化、象素操作函数。如象素位置 glRasterPos*()、线型宽度 glLineWidth()、多边形绘制模式 glPolygonMode(),读取象素 glReadPixel()、...

    OpenGL函数参考手册(gl reference manual)

    OpenGL函数参考手册是一本至关重要的资源,为开发者提供了详尽的OpenGL函数介绍和应用实例。OpenGL,全称Open Graphics Library,是一种跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D图像。它广泛应用于...

    主要的OpenGL函数库

    OpenGL函数库是图形编程的重要组成部分,它提供了丰富的功能来创建和操纵2D和3D图形。OpenGL核心库和OpenGL实用库是两个主要的部分。 1. OpenGL核心库:这是OpenGL的基础,包含了115个基本函数,以“gl”为前缀。...

    OpenGL函数库..pdf

    OpenGL函数库是计算机图形学中用于创建和操纵2D和3D图形的重要工具。这个库提供了一系列的函数,允许开发者直接控制图形硬件,实现复杂的渲染效果。以下是一些关键的OpenGL函数及其功能的详细说明: 1. `glAccum`: ...

    opengl函数大全

    ### OpenGL函数大全解析 #### OpenGL概述 OpenGL是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它利用硬件加速功能,为开发者提供了高效绘制复杂图形的能力。本文将根据提供的部分内容...

Global site tag (gtag.js) - Google Analytics