v805第五章opengl3d图形渲染美化课程.pdfVIP

v805第五章opengl3d图形渲染美化课程.pdf

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
颜色缓冲区 • 颜色缓冲区 (COLOR_BUFFER)就是帧缓冲区 (FRAME_BUFFER) • OpenGL在绘制图元时,先是在一个缓冲区中完成渲染,然后再把渲染结果交换到屏幕上。把这两个缓冲区称为前颜色 缓冲区 (屏幕)和后颜色缓冲区。在默认情况下,OpenGL命令是在后颜色缓冲区进行渲染的。 glSwapBuffer()是用来实现由后缓冲到前缓冲。 当然,也可以直接 颜色缓冲区中进行渲染。 若要 颜色缓冲区中进行渲染,第 法是直接告诉OpenGL希望 颜色缓冲区中进行绘图,可 以调用下面这个函数来实现这个目的: void glDrawBuffer (Glenum mode); 如果参数mode指定为GL_FRONT ,OpenGL就会 颜色缓冲区中进行渲染; 如果参数mode指定为GL_BACK ,那么渲染将在后颜色缓冲区中进行。 颜色缓冲区进行渲染的第二种方法是在OpenGL被初始化时简单地不要求进行双缓冲区渲染。进行单缓冲区 渲染。glutInitDis yMode(GLUT_DOUBLE | GLUT_RGB) ;在glut中可以简单地忽略GLUT_DOUBLE参数。 进行单缓冲区渲染时,如果希望绘制结果显示到屏幕上,需要调用glFlush();或glFinish();函数。 见案例:《前台缓冲》、《双缓冲》 累计缓冲区 与RGBA模式下的颜色缓冲区一样,累计缓冲区也用于 RGBA颜色数据。 累积缓冲区允许你把渲染到颜色缓冲区的值,拷贝到累积缓冲区。在多次拷贝操作到累积缓冲区 时,可以用不同方式的把颜色缓冲区内容和当前累积缓冲区的内容进行重复混合。当在累积缓冲 区完成一幅图像 ,可以拷回颜色缓冲区,然后通过SwapBuffers显示到屏幕上。 累积缓冲区的操作通过void glAccum(GLenum op, GLfloat value);控制。 第一个参数表示对累积缓冲区所进行的操作。第二个参数是浮点数用于指定缩放因子。 OpenGL支持的累积缓冲区的操作如下表: • 由于累积缓冲区会带来大内存的开销,所以在实时应用程序中比较 少用。但在非实时的应用程序中,可以产生实时应用程序无法做到 的效果。例如,你可以多次渲染场景,并在每次渲染时进行抖动零 点几个像素,这样就可以产生整个场景的反走样的效果,比多重采 样的效果还要好。还可以模糊前景或背景,然后清晰的渲染一个物 体来模拟照相机景深的效果。 见:案例 《累积缓冲》 深度缓冲区 深度缓冲区中所填充的是深度值而不是颜色值。通过深度缓冲区,可以进行深度测试,从而确定像素的遮 挡关系,保证渲染正确. 深度缓冲类似颜色缓冲 (颜色缓冲 所有fragment颜色), 着每个fragment的信息,它 (通常) 和颜色缓冲有着相同的宽度和高度。深度缓冲是由窗口系统自动创建的,它 着16、24或32位的浮点 数深度值。在多大数系统中,你会看到它的深度缓冲是24位的。 深度缓冲中的深度值的范围在0.0到1.0之间,它会把它的内容与观察者看到的所有场景中的物体的z值 对比。这些在视图空间中的z值可以是在投影视锥的远平面和近平面之间的任意值。这样我们就需要某 种方式把这些视图空间中的z值转变为0到1到范围, 式是线性地把它们转为0到1的范围。下面的 (线性) 就能把z值转为0.0到1.0之间的深度值: 模版缓冲区 • 模板缓冲区的用途就是把绘图限制在屏幕中的某个区域,用glutInitDis yMode函数时在参数 中加上GLUT_STENCIL • 模板缓冲区与深度缓冲区有一点不同。无论是否启用深度测试,当有像素被绘制时,总会重新 设置该像素的深度值 (除非设置glDepthMask(GL_FALSE);)。而模板测试如果不启用,则像素 的模板值会保持不变,只有启用模板测试时才有可能修改像素的模板值。

文档评论(0)

182****0328 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档