- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL入门学习之九——使用溷合来实现半透明效果.pdf
OpenGL 入门学习之九——使用混合来实现半透明效果
2009-01-07 11:59
混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色
和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。
假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的
物体,再绘制红色玻璃。在绘制红色玻璃的时候,利用“混合”功能,把将要绘制上去的红
色和原来的绿色进行混合,于是得到一种新的颜色,看上去就好像玻璃是半透明的。
要使用 OpenGL 的混合功能,只需要调用:glEnable(GL_BLEND); 即可。
要关闭 OpenGL 的混合功能,只需要调用:glDisable(GL_BLEND); 即可。
注意:只有在 RGBA 模式下,才可以使用混合功能,颜色索引模式下是无法使用混合功能
的。
一、源因子和目标因子
前面我们已经提到,混合需要把原来的颜色和将要画上去的颜色找出来,经过某种方式处理
后得到一种新的颜色。这里把将要画上去的颜色称为“源颜色”,把原来的颜色称为“目标
颜色”。
OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因
子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜色。(也
可以不是相加,新版本的 OpenGL 可以设置运算方式,包括加、减、取两者中较大的、取两
者中较小的、逻辑运算等,但我们这里为了简单起见,不讨论这个了)
下面用数学公式来表达一下这个运算方式。假设源颜色的四个分量(指红色,绿色,蓝色,
alpha 值)是(Rs, Gs, Bs, As),目标颜色的四个分量是(Rd, Gd, Bd, Ad),又设源因子为(Sr, Sg,
Sb, Sa),目标因子为(Dr, Dg, Db, Da) 。则混合产生的新颜色可以表示为:
(Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da)
当然了,如果颜色的某一分量超过了 1.0,则它会被自动截取为 1.0,不需要考虑越界的问题。
源因子和目标因子是可以通过 glBlendFunc 函数来进行设置的。glBlendFunc 有两个参数,前
者表示源因子,后者表示目标因子。这两个参数可以是多种值,下面介绍比较常用的几种。
GL_ZERO : 表示使用0.0 作为因子,实际上相当于不使用这种颜色参与混合运算。
GL_ONE : 表示使用 1.0 作为因子,实际上相当于完全的使用了这种颜色参与混合运
算。
GL_SRC_ALPHA :表示使用源颜色的alpha 值来作为因子。
GL_DST_ALPHA :表示使用目标颜色的alpha 值来作为因子。
GL_ONE_MINUS_SRC_ALPHA :表示用 1.0 减去源颜色的 alpha 值来作为因子。
GL_ONE_MINUS_DST_ALPHA :表示用 1.0 减去目标颜色的 alpha 值来作为因子。
除此以外,还有GL_SRC_COLOR (把源颜色的四个分量分别作为因子的四个分量)、
GL_ONE_MINUS_SRC_COLOR 、GL_DST_COLOR 、GL_ONE_MINUS_DST_COLOR 等,
前两个在 OpenGL 旧版本中只能用于设置目标因子,后两个在OpenGL 旧版本中只能用于设
置源因子。新版本的 OpenGL 则没有这个限制,并且支持新的 GL_CONST_COLOR (设定
种常数颜色,将其四个分量分别作为因子的四个分量)、
GL_ONE_MINUS_CONST_COLOR 、GL_CONST_ALPHA、GL_ONE_MINUS_CONST_ALP
HA 。另外还有GL_SRC_ALPHA_SATURATE 。新版本的OpenGL 还允许颜色的 alpha 值和
RGB 值采用不同的混合因子。但这些都不是我们现在所需要了解的。毕竟这还是入门教材,
不需要整得太复杂~
举例来说:
如果设置了 glBlendFunc(GL_ONE, GL_ZERO); ,则表示完全使用源颜色,完全不使用目标颜
色,因此画面效果和不使用混合的时候一致(当然效率可能会低一点点)。如果没有设置源
因子和目标因子,则默认情况就是这样的设置。
如果设置了 glBlendFunc(GL_ZERO, GL_ONE); ,则表示完全不使用源颜色,因此无论你想画
什么,最后都不会被画上去了。(但这并不是说这样设置就没有用,有些时候可能有特殊用
途)
如果设置了 gl
您可能关注的文档
最近下载
- 2024NIHSS评分量表解读PPT.pptx VIP
- 跨文化交际――中西方文化差异PPT课件.ppt VIP
- 12J1工程做法图集标准.docx VIP
- 《跨文化交际》课件:探索不同国家的文化差异.ppt VIP
- 四法一纲.doc VIP
- 新人教版8年级上册物理全册教学课件(2024年秋季新版教材).pptx
- 领导力与管理沟通PPT课件(共19章)第9章 非语言表达.pptx VIP
- 领导力与管理沟通PPT课件(共19章)第8章 书面表达.pptx VIP
- 2025年农村公路路面改造以工代赈项目可行性研究报告-新大纲.docx VIP
- 江苏省化工和危险化学品生产企业安全审计表解读 2025年1月2日.pptx VIP
文档评论(0)