glBlendFunc

编辑:砍头网互动百科 时间:2019-11-12 10:46:00
编辑 锁定
本词条缺少信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
glBlendFunc,即定义像素算法。

目录

glBlendFunc简介

编辑
glBlendFunc 定义像素算法。

glBlendFunc语法

编辑
void WINAPI glBlendFunc(GLenum sfactor,GLenum dfactor);

glBlendFunc参数

编辑
sfactor
指定红绿蓝和 alpha 源混合因子如何计算。初始值为GL_ONE。 接受了九个符号常量: 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_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 的相应调用之间被调用该函数。

glBlendFunc备注

编辑
在 RGB 模式下可以使用混合使用帧缓冲区 (目标值) 中已有的 RGBA 值传入的 (源) RGBA 值的函数绘制像素为单位)。 默认情况下,混合处于禁用状态。 启用和禁用混合使用 glEnable glDisable 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 R 、 m G 、 m B 、 m A ) 是红色绿色、 蓝白 alpha bitplanes 数。
源和目标规模因素被称为 (s R 、 s G 、 s B 、 s A ) 和 (d R 、 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
(i,i,i, 1)
在的表
i = min (As ,kA -Ad ) /kA
绘制 RGBA 模式中时,请确定像素的混合的 RGBA 值,系统使用以下公式:
R(d) = min(kR ,RssR +RddR )
G(d) = min(kG ,GssG +GddG )
B(d) = min(kB, BssB +BddB )
A(d) = min(kA ,AssA +AddA )
尽管两地精度明显,上述方程的混合算法不完全指定,因为混合操作具有不精确的整数颜色值。 但是,应等于之一的一个混合因素保证不会修改其被乘数,并为零的混合因子等将其被乘数减少到零。 因此,例如当 sfactor 是 GL_SRC_ALPHA、 dfactor 是 GL_ONE_MINUS_SRC_ALPHA,和 A s 等于 k A,方程降低简单更换:
Rd = Rs
Gd = Gs
B d = Bs
Ad = A[1]  s
示例
透明度最好使用从最远到最近存储图元的混合函数( 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 )。 目的 alpha 位平面存储累积的覆盖,必须使用这个平面以使这个混合函数正确进行操作。
输入(源) Alpha 可以被看作一种材料不透明性,范围从 1.0 (KA)开始,这时代表完全不透明度,一直到0.0 (0) 这时代表完全透明。
在启用多个颜色缓冲区的绘图时,GL分别为每个已启用的缓冲区执行混合,使用该缓冲区的内容作为目标颜色。 (请参阅 glDrawBuffer)。
参考资料
词条标签:
计算机学