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 函数可以检索以下错误代码。
名称 | 含义 |
---|---|
|
重构或 dfactor 不是接受的值。 |
|
函数在 对 glBegin 的调用和 glEnd 的相应调用之间调用。 |
注解
在 RGB 模式下,可以使用将传入 (源) RGBA 值的函数与帧缓冲区中已 (目标值) 的 RGBA 值混合来绘制像素。 默认情况下,混合处于禁用状态。 将 glEnable 和 glDisable 与 GL_BLEND 参数一起使用,以启用和禁用混合。
启用后, glBlendFunc 定义混合操作。 sfactor 参数指定使用 9 种方法中的哪一种方法来缩放源颜色组件。 dfactor 参数指定使用 8 种方法中的哪一种方法来缩放目标颜色组件。 下表描述了十一种可能的方法。 每个方法分别为红色、绿色、蓝色和 alpha 定义四个刻度因子。
在表中和后续公式中,源和目标颜色组件称为 (R?,G?,B?,答?) 和 (Rd、Gd、Bd、Ad ) 。 据了解,它们介于零和 (kR、kG、kR、kA ) 之间有整数值,其中
kR = 2mR - 1
kG = 2mG - 1
kB = 2mB - 1
kA = 2mA - 1
和 (mR、mG、mB、mA ) 是红色、绿色、蓝色和 alpha 位平面的数目。
源和目标缩放因子称为 (sR、sG、sB、sA ) 和 (dR、 dG、dB、dA ) 。 表中所述的缩放因子,表示 (fR、fG、fB、fA ) ,表示源因素或目标因素。 所有刻度因子都具有范围 [0,1]。
参数 | (fR、fG、fB、fA ) |
---|---|
GL_ZERO | (0,0,0,0) |
GL_ONE | (1,1,1,1) |
GL_SRC_COLOR | (R?/ kR, G?/ kG, B?/ kB, A?/ kA ) |
GL_ONE_MINUS_SRC_COLOR | (1,1,1,1) - (R?/ kR, G?/ kG, B?/ kB, A?/ kA ) |
GL_DST_COLOR | (RdkR、GdkG / / 、BdkB、AdkA / / ) |
GL_ONE_MINUS_DST_COLOR | (1,1,1,1) - (RdkR、GdkG / / 、BdkB / 、AdkA / ) |
GL_SRC_ALPHA | (A?/ kA, A?/ kA, A?/ kA, A?/ kA ) |
GL_ONE_MINUS_SRC_ALPHA | (1,1,1,1) - (A?/ kA, A?/ kA, A?/ kA, A?/ 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 ( kR, R?sRRddR + )
G (d) = min ( kG, G?sGGddG + )
B (d) = min ( kB, B?sBBddB + )
(d) = min ( kA, A?sAAddA + )
尽管上述公式的明显精度,但未完全指定混合算术,因为混合运算与不精确的整数颜色值一起使用。 但是,一个应等于一个的混合因子可以保证不修改其乘数,而混合因子等于零将它的乘数减少到零。 例如,当重构是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 [仅限桌面应用] |
标头 |
|
库 |
|
DLL |
|