2 回答
TA贡献1712条经验 获得超3个赞
我个人理解:
两个参数的取值都可以是如下常量之一:
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, and GL_SRC_ALPHA_SATURATE
比如GL_ZERO表示alpha取值为0,GL_ONE表示1,GL_DST_COLOR表示取目标区域的颜色值,GL_SRC_ALPHA表示取源区域的alpha值等等。例如:
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
表示把渲染的图像叠加到目标区域,也就是说源的每一个像素的alpha都等于自己的alpha,目标的每一个像素的alpha等于1。这样叠加次数越多,叠加的图元的alpha越高,得到的结果就越亮。因此这种融合用于表达光亮效果。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
表示把渲染的图像融合到目标区域。也就是说源的每一个像素的alpha都等于自己的alpha,目标的每一个像素的alpha等于1减去该位置源像素的alpha。 因此不论叠加多少次,亮度是不变的。
如此等等。自己试一试才会明白。
这个函数是制作很多特技效果的核心,变幻无穷,我这里说的只是皮毛,要完整地理解就必须看官方文档(MSDN就是一个很全面的文档),英语不好也要硬看,其实谁刚开始看的时候都会头疼,看多了英语自然就练出来了...
TA贡献1806条经验 获得超8个赞
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 数。
- 2 回答
- 0 关注
- 261 浏览
添加回答
举报
