glBlendFunc 函数

glBlendFunc 函数指定像素算术。

语法

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

参数

sfactor

指定如何计算红色、绿色、蓝色和 alpha 源混合因子。 接受九个符号常量:GL_ZERO、GL_ONE、GL_DST_COLOR、GL_ONE_MINUS_DST_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、GL_DST_ALPHA、GL_ONE_MINUS_DST_ALPHA和GL_SRC_ALPHA_SATURATE。

dfactor

指定如何计算红色、绿色、蓝色和 alpha 目标混合因子。 接受八个符号常量:GL_ZERO、GL_ONE、GL_SRC_COLOR、GL_ONE_MINUS_SRC_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、GL_DST_ALPHA和GL_ONE_MINUS_DST_ALPHA。

返回值

此函数不返回值。

错误代码

glGetError 函数可以检索以下错误代码。

名称 含义
GL_INVALID_ENUM
重构dfactor 不是接受的值。
GL_INVALID_OPERATION
函数在 对 glBegin 的调用和 glEnd 的相应调用之间调用。

注解

在 RGB 模式下,可以使用将传入 (源) RGBA 值的函数与帧缓冲区中已 (目标值) 的 RGBA 值混合来绘制像素。 默认情况下,混合处于禁用状态。 将 glEnableglDisable 与 GL_BLEND 参数一起使用,以启用和禁用混合。

启用后, glBlendFunc 定义混合操作。 sfactor 参数指定使用 9 种方法中的哪一种方法来缩放源颜色组件。 dfactor 参数指定使用 8 种方法中的哪一种方法来缩放目标颜色组件。 下表描述了十一种可能的方法。 每个方法分别为红色、绿色、蓝色和 alpha 定义四个刻度因子。

在表中和后续公式中,源和目标颜色组件称为 (R?,G?,B?,?) 和 (RdGdBdAd ) 。 据了解,它们介于零和 (kRkGkRkA ) 之间有整数值,其中

kR = 2mR - 1

kG = 2mG - 1

kB = 2mB - 1

kA = 2mA - 1

和 (mRmGmBmA ) 是红色、绿色、蓝色和 alpha 位平面的数目。

源和目标缩放因子称为 (sRsGsBsA ) 和 (dRdGdBdA ) 。 表中所述的缩放因子,表示 (fRfGfBfA ) ,表示源因素或目标因素。 所有刻度因子都具有范围 [0,1]。

参数 (fRfGfBfA )
GL_ZERO (0,0,0,0)
GL_ONE (1,1,1,1)
GL_SRC_COLOR (R?/ kRG?/ kGB?/ kBA?/ kA )
GL_ONE_MINUS_SRC_COLOR (1,1,1,1) - (R?/ kRG?/ kGB?/ kBA?/ kA )
GL_DST_COLOR (RdkRGdkG / / BdkBAdkA / / )
GL_ONE_MINUS_DST_COLOR (1,1,1,1) - (RdkRGdkG / / 、BdkB / AdkA / )
GL_SRC_ALPHA (A?/ kAA?/ kAA?/ kAA?/ kA )
GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) - (A?/ kAA?/ kAA?/ kAA?/ kA )
GL_DST_ALPHA (AdkA、AdkA / / AdkA / 、AdkA / )
GL_ONE_MINUS_DST_ALPHA (1,1,1,1) - (AdkA、AdkA / / 、AdkA / 、AdkA / )
GL_SRC_ALPHA_SATURATE (i、i、i、 1)

在表中,

i = min (A?、kAAd - ) /kA

若要在 RGBA 模式下绘制时确定像素的混合 RGBA 值,系统使用以下公式:

R (d) = min ( kRRsRRddR + )

G (d) = min ( kGGsGGddG + )

B (d) = min ( kB, BsBBddB + )

(d) = min ( kAAsAAddA + )

尽管上述公式的明显精度,但未完全指定混合算术,因为混合运算与不精确的整数颜色值一起使用。 但是,一个应等于一个的混合因子可以保证不修改其乘数,而混合因子等于零将它的乘数减少到零。 例如,当重构是GL_SRC_ALPHA时,dfactor 是GL_ONE_MINUS_SRC_ALPHA,A?等于 kA,公式减少为简单替换:

RdR = ?

GdG = ?

BdB = ?

AdA = ?

示例

透明度最好是使用 glBlendFunc (GL_SRC_ALPHA来实现的,GL_ONE_MINUS_SRC_ALPHA) 基元从最远到最接近的基元。 请注意,此透明度计算不需要帧缓冲区中存在 alpha 位平面。

还可以使用 glBlendFunc (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 以任意顺序呈现抗锯齿点和线条。

若要优化多边形反锯齿,请使用 glBlendFunc (GL_SRC_ALPHA_SATURATE,GL_ONE) 多边形从最接近到最远排序。 (请参阅 glEnable 中的GL_POLYGON_SMOOTH参数,了解多边形反锯齿。) 目标 alpha 位平面的信息,必须存在此混合函数才能正常运行,存储累积的覆盖范围。

传入 (源) alpha 是一种物质不透明度,范围为 1.0 (KA ) ,表示完全不透明度,到 0.0 (0) ,表示完全透明度。

为绘图启用多个颜色缓冲区时,将单独混合每个已启用的缓冲区,并且缓冲区的内容用于目标颜色。 (请参阅 glDrawBuffer.)

混合仅影响 RGBA 呈现。 颜色索引呈现器会忽略它。

以下函数检索与 glBlendFunc 相关的信息:

带参数GL_BLEND_SRC的 glGet

带参数GL_BLEND_DST的 glGet

glIsEnabled 与参数GL_BLEND

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl.h

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc