OPenGL glBlendFunc函数

glBlendFunc,即定义像素算法。
像素可以通过函数操作后被绘出,该函数的功能是将引入的值与颜色缓冲中已有的值混合。使用glEnable方法与glDisable方法以GL_BLEND为参数,决定是否开启混合功能,该功能初始为关闭的。
当混合功能开启时glBlendFunc定义混合功能的操作。sfactor指明十一中方法中的哪一种用来衡量源颜色要 素,dfactor指明十种方法中的哪一种用来衡量目的颜色要素。十一种可能的方法将在下面进行介绍。每一种方法定义了四个衡量元素,分别是红、绿、蓝和 alpha。

简介

编辑
glBlendFunc 定义像素算法。

语法

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

参数

编辑
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 的相应调用之间被调用该函数。

备注

编辑
在 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 , Rs sR + Rd dR )
G( d) = min( kG , Gs sG + Gd dG )
B( d) = min( kB , Bs sB + Bd dB )
A( d) = min( kA , As sA + Ad dA )
尽管两地精度明显,上述方程的混合算法不完全指定,因为混合操作具有不精确的整数颜色值。 但是,应等于之一的一个混合因素保证不会修改其被乘数,并为零的混合因子等将其被乘数减少到零。 因此,例如当 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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值