glBlendFunc,函数,指定像素算术。

简介

glBlendFunc 函数指定像素算术。

语法

void WINAPI glBlendFunc(

GLenum sfactor,

GLenum dfactor

);

参数

sfactor

指定如何计算红绿色、蓝白 alpha 源混合因素。接受了九个符号常量: GL_ONE_MINUS_DST_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_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。

返回值

返回以下错误代码和他们的条件。

返回代码

说明

GL_INVALID_ENUM

sfactor 或 dfactor 不被接受的值。

GL_INVALID_OPERATION

调用 glBegin 和 glEnd 的相应调用之间被调用该函数。

备注

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

当启用,glBlendFunc 定义混合的操作。 sfactor 参数指定的九个方法,用于扩展源颜色分量。 dfactor 参数指定的八个方法,用于扩展目标颜色分量。十一个可能的方法是在下表中所述。每个方法定义四个规模因素 — — 为红色、绿色、蓝色和阿尔法各一个。

在表中,并在随后方程在源和目标颜色组件被称为 (R s ,G s 、 B s , s )和(R d ,G d 、 B d , d )。他们被理解为是具有零之间的整数值和(k R 、 k G 、 k R 、 k A ),其中

kR = 2 m R-1

kG = 2 m G-1

kB = 2 m B-1

kA = 2 m A-1

和 (m 研发、 m G 、 m B 、 m A )是红色绿色、蓝白 alpha bitplanes 数。

源和目标规模因素被称为(s R 、 s G 、 s B 、 s A )和(d 研发、 d G 、 d B 、 d A )。表示的表中所述的规模因素( f R f、 G 、 f B 、 f A ),表示源或目标的因素。所有规模因素都有范围 [0]。

参数

(f R f、 G 、 f B 、 f A )

GL_ZERO

(0,0,0,0)

GL_ONE

(1,1,1,1)

GL_SRC_COLOR

(R s / s k R 、 G / k G 、 B s / k B、 A s / k A)

GL_ONE_MINUS_SRC_COLOR

(1,1,1,1)-(R s / s k R 、 G / k G 、 B s / k B、 A s / k A)

GL_DST_COLOR

(R d / d k R 、 G / k G 、 B d / k B、 A d / k A)

GL_ONE_MINUS_DST_COLOR

(1,1,1,1)-(R d / d k R 、 G / k G 、 B d / k B、 A d / k A)

GL_SRC_ALPHA

(A s / s k A 、 A / s k A 、 A / k A、 A s / k A)

GL_ONE_MINUS_SRC_ALPHA

(1,1,1,1)-(A s / s k A 、 A / s k A 、 A / k A、 A s / k A)

GL_DST_ALPHA

(A d / k A , d / k A A、 d / k A、 A d / k A)

GL_ONE_MINUS_DST_ALPHA

(1,1,1,1)-(A d / k A , d / k A A、 d / k A、 A d / k A)

GL_SRC_ALPHA_SATURATE

(我,我, 1)

在的表

我 = 分钟(A s 、 k A-A d) / k A

绘制 RGBA 模式中时,请确定像素的混合的 RGBA 值,系统使用以下公式

(d) R = 分钟(k R 、 R s s R + R d d R)

(d) G = 分钟(k G ,G s s G + G d d G)

(d) B = 分钟(k B 、 B s s B + B d d B)

(d) = 分钟(k A , s s A + A d d A)

尽管两地精度明显,上述方程的混合算法不完全指定,因为混合操作具有不精确的整数颜色值。但是,应等于之一的一个混合因素保证不会修改其被乘数,并为零的混合因子等将其被乘数减少到零。因此,例如当 sfactor 是 GL_SRC_ALPHA、 dfactor 是 GL_ONE_MINUS_SRC_ALPHA,和 A s 等于 k A,方程降低简单更换:

Rd = R s

Gd = G s

B d = B s

Ad = A s

示例

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

您还可以使用 glBlendFunc ( GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA ) 按任意顺序呈现是锯消除点和线。

若要优化的多边形消除锯齿,使用 glBlendFunc ( GL_SRC_ALPHA_SATURATE GL_ONE )与排序从最近的最远的多边形。 (见中 glEnable 的 GL_POLYGON_SMOOTH 参数信息的多边形消除锯齿)。目标 alpha bitplanes 必须正确操作此混合函数存在存储累积的覆盖范围。

传入(源)字母是从 1.0 (K A) 代表完整透明度为 0.0 (0) 表示完全透明一材料的不透明度。

在启用多个颜色缓冲区的绘图时每个已启用的缓冲区分开,混合,缓冲区的内容用于目标颜色。 (请参阅 glDrawBuffer。

混合影响唯一 RGBA 呈现。它的颜色索引呈现器忽略。