三维图形程序设计6.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基本概念 混合,它是透明技术的核心。指两种颜色各分量依据一定的比例混在一起合二为一。 实例: 坐在汽车内透过车窗的茶色玻璃看车外的绿树的情况。 分析: 这些树木的颜色并不是它们本来的绿色,而是透明的茶色与不透明的绿色的混合颜色。也就是说,最终的颜色来源于两部分,一部分来自于玻璃的茶色,另一部分来自于树木的绿色。两部分所占的百分比依据玻璃的透射变化,若玻璃透射率为80%(即一束光照在其上有80%的透射过去),其不透明度为20%,即这里的a值就等于0.2,这样进入眼中的树木颜色是20%的玻璃颜色与80%的树木本身颜色的合成。 基本概念 混合功能被启用后,alpha值用来处理的片元颜色值与存储在帧缓存中的像素颜色值合并起来,将场景光栅化并转换为片元执行混合操作,最后将最终像素写入帧缓存中。 理解源因子和目标因子 输入片元称为源,而目前存储在帧缓存中的像素值称为目标。 运算实质 源因子(Source Factor)和目的因子(Destination Factor)。从数学的角度来看,设源因子和目的因子分别为(Sr、Sg、Sb、Sa)与(Dr、Dg、Db、Da),则融合的最终结果是: Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da 与混合相关的函数 void glBlendFunc GLenum sfactor,GLenum dfactor void glBlendFuncSeparate srcRGB,destRGB,srcalpha,destalpha ; glEnable GL_BLEND ; glDisable GL_BLEND ; glBlendEquation mode 分析一个混合的实例 void init glEnable GL_BLEND ; glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ; glShadeModel GL_FLAT ; glClearColor 0.0, 0.0, 0.0, 0.0 ; void display glClear GL_COLOR_BUFFER_BIT ; glColor4f 1.0, 0.0, 0.0, 0.7 ; glRectf 0.25, 0.4, 0.75, 0.9 ; glColor4f 0.0, 1.0, 0.0, 0.5 ; glRectf 0.1, 0.1, 0.6, 0.6 ; glColor4f 0.0, 0.0, 1.0, 0.3 ; glRectf 0.4, 0.1, 0.9, 0.6 ; glFlush ; 三维场景的混合 显示列表 OpenGL显示列表(Display List)是由一组预先存储起来的留待以后调用的OpenGL函数语句组成的,当调用这张显示列表时就依次执行表中所列出的函数语句。 前面内容所举出的绘制方式都是瞬时给出函数命令,则OpenGL瞬时执行相应的命令,这种绘图方式叫做立即或瞬时方式(immediate mode)。 显示列表的优势 OpenGL显示列表的设计能优化程序运行性能,尤其是网络性能。它被设计成命令高速缓存,而不是动态数据库缓存。也就是说,一旦建立了显示列表,就不能修改它。   采用显示列表方式绘图一般要比瞬时方式快,尤其是显示列表方式可以大量地提高网络性能,即当通过网络发出绘图命令时,由于显示列表驻留在服务器中,因而使网络的负担减轻到最小。另外,在单用户的机器上,显示列表同样可以提高效率。 显示列表的适用场合 5大场合)   并不是只要调用显示列表就能优化程序性能。因为调用显示列表本身时程序也有一些开销,若一个显示列表太小,这个开销将超过显示列表的优越性。下面给出显示列表能最大优化的场合: 矩阵操作 大部分矩阵操作需要OpenGL计算逆矩阵,矩阵及其逆矩阵都可以保存在显示列表中。 光栅位图和图像 程序定义的光栅数据不一定是适合硬件处理的理想格式。当编译组织一个显示列表时,OpenGL可能把数据转换成硬件能够接受的数据,这可以有效地提高画位图的速度。 显示列表的适用场合 材质和光照模型 当用一个比较复杂的光照环境绘制场景时,可以为场景中的每个物体改变材质。但是材质计算较多,因此设置材质可能比较慢。若把材质定义放在显示列表中,则每次改换材质时就不必重新计算了。因为计算结果存储在表中,因此能更快地绘制光照场景。 纹理 因为硬件的纹理格式可能与OpenGL格式不一致,若把纹理定义放在显示列表中,则在编译显示列表时就能对格式进行转换,而不是在执行中进行,这样就能大大提高效率。 多边形的图案填充模式 即可将定义的图案放在显示列表中。 创建显示列表 void glNewList GLui

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档