现在的位置: 首页 > 综合 > 正文

OpenGL超级宝典笔记7

2013年12月02日 ⁄ 综合 ⁄ 共 1089字 ⁄ 字号 评论关闭

第十二章 交互式图形

学习使用选择和反馈,这两个都是OpenGL的强大特性,它们能够让用户与场景进行交互。选择和挑选用于在场景中的某个区域中确认一个物体,它所使用的是OpenGL坐标而不是窗口坐标。反馈返回在窗口中实际绘制图元的宝贵信息。

a) 选择 实际上是一种渲染模式,但在选择模式下,像素并没有被实际复制到帧缓冲区。反之,在可视区中绘制的图元将在一个选择缓冲区中产生点记录。通常做法是为一组图元命名,在选择模式下出现一次点击事件,就把名字压入栈中。选择模式:glRenderMode(GL_SELECTION);还有另外两种模式:GL_FEEDBACKGL_RENDER模式。

b) 挑选 使用选择时,当我们根据鼠标位置创建和使用一个经过修改的可视区域时,就会产生挑选事件。glPickMatrix函数用于创建一个矩阵,描述新的可视区域。首先保存可视化区域,然后把渲染模式切换到选择模式,对可视区域进行修改,只包含鼠标下面的区域,并调用RenderScene函数对场景进行重绘。在场景进行重绘之后,我们再次调用glRenderScene函数把OpenGL恢复为正常的渲染模式,并获取所产生的点击记录的数量。

c) 反馈 和选择一样也是一种渲染模式,将信息写入到反馈缓冲区中,提示场景将如何被渲染。这信息包括了用窗口坐标表示的经过转换的顶点数据、根据光照计算产生的颜色数据以及纹理数据。反馈缓冲区是一个浮点值数组,它是用glFeedback函数指定的。反馈缓冲区包含了一个标记列表,接着是顶点数据以及可能出现的颜色和纹理数据。

 

第十三章 遮挡查询,消除不必要的工作

在渲染复杂的场景时,我们有时候会渲染一些实际上不可见的东西,从而浪费硬件资源。通过在物体四周绘制一个边框,或其他一些简单的边界区域。我们可以在付出很低代价的情况下知道物体在场景中的大致边界。如果场景中的遮挡物隐藏了这个边框,它也将遮挡实际的物体。通过对一个物体的边框进行查询,我们可以计算需要绘制多少像素。

a) 边框 遮挡检测背后的理论是:如果一个物体的边界区域(bounding volume)并不可见,那么这个物体也不可见。最简单的边界区域是立方体,又称边框。它由8个顶点、6个面组成。

b) 对查询对象进行查询 依次对每个物体的查询对象进行检查,并决定是否绘制这个球体。.调用glGetQueryObjectiv函数来判断那个表示通过测试的计数器的值是否为0,如果是就不需要绘制这个物体。

c) 最佳实践 首先绘制遮挡物,然后在场景中有条件地绘制剩余的物体。如果程序允许,应该按照从前向后的顺序对被遮挡物进行排序。

抱歉!评论已关闭.