OpenGL完全教程 第二章 OpenGL 工作机制_第1页
OpenGL完全教程 第二章 OpenGL 工作机制_第2页
OpenGL完全教程 第二章 OpenGL 工作机制_第3页
OpenGL完全教程 第二章 OpenGL 工作机制_第4页
OpenGL完全教程 第二章 OpenGL 工作机制_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、OpenGL 完全教程 第二章 OpenGL 工作机制作者:何咏 日期:2006-2-3 20:49:10 点击:3513如需转载本文,请声明作者及出处。第二章 OpenGL 工作机制要使用好OpenGL,了解它的工作机制是非常必要的。学习完本章内容之后,你就能理解上一章示例程序中在绘图之前那些工作的意义了。在本章内容中,你将了解:如何在OpenGL 中表示3D 物体OpenGL 的渲染流水线OpenGL 中函数的命名规则2.1 OpenGL中3D 物体的表示在3D 空间中,场景是物体或模型的集合。在3D 图形渲染中,所有的物体都是由三角形构成的。这是因为一个三角形可以表示一个平面,而3D 物

2、体就是由一个或多个平面构成的。比如下图表示了一个非常复杂的3D地形,它门也不过是由许许多多三角形表示的。 渲染后的地形面貌复杂的地形也是由三角形构成的(图片来自 本站 Terrian Editor因此,在OpenGL 中,我们只要指定一个或多个三角形,就可以表示任意3D 物体。那么如何指定三角形呢?OpenGL提供三种指定三角形的方法:即单个三角形、三角条形和三角扇形。指定单个三角形。这是最简单,最直接的方法。即调用特定的OpenGL 函数,传入三个顶点坐标,指定一个三角形。如下图: 三角条形。这种方式适合于同时绘制多个三角形,且这些三角形之间至少存在一条公共边。一个三角条形是在单个三角形的基

3、础上,再指定一个或多个顶点。这些顶点按照次序同上一顶点一起构成一 个新的三角形。下图演示了这种推进过程。 三角扇形。三角扇形中,所有顶点按照一个中心点成扇形排列。如下图,是一个以V1为中心点的三角扇形。 既然使用三角形就可以表示任何图形,为什么还要使用三角条形和三角扇形呢?这是因为在OpenGL 渲染流水线中,对于每个顶点都要进行变换运算 。而对于一些连接在一起的三角形组来说,使用三角条形或三角扇形就减少了顶点的数目,这意味着减少了对顶点的运算,因此提高了渲染速度。例如,上图中第三个三角扇形,该扇形描述了4个三角形。如果把这四个三角形都一一作为单个三角形传给OpenGL 的话,我们需要3*4=

4、12个顶点,而使用了三角扇形之后,我们只使用了6个顶点。这节约了一半的运算量!2.2 OpenGL 的渲染流水线当我们把要绘制的三角形传给OpenGL 之后,OpenGL还要做许多工作以完成3D 空间到屏幕的投影。这一系列的过程被称为OpenGL 的渲染流水线。一般地,OpenGL的渲染流程如下: 当一个场景确定之后,如果我们想移动某个物体,或者要实现场景内的漫游,就必须进行模型视图的变换。模型视图变换可以根据需要,移动或旋转一个或多个物体。例如,如果我们想在3D 空间中沿着Z 轴向前走的话,只需要把所有物体向-Z方向移动n 个单位即可。如果我们要 向左看,就应该把所有物体沿着Y 轴渲染向右旋

5、转N 个角度。下图演示了这个过程。 在一些封闭的3D 物体中,朝着物体内部的面总是不可见的。对于这些永远不可见的平面,我们可以使用背面隐藏忽略对它的绘制以提高渲染速度。为了实现背面隐藏,我们在绘制三角形的时候必须注意三角形的绕法。一般的,OpenGL 默认为逆时针 缠绕的面是正面。如下图所示的三角形中,如果把顶点按照V1->V3->V2的顺序传给OpenGL,那么OpenGL 就会认为这个三角形朝着屏幕的面是正面。 使用背面隐藏,就要求我们在把图形传给OpenGL 的时候要始终遵守正面使用逆时针绕法的规定。要开启背面隐藏的功能,只需调用函数:glE n abl e(GL_CULL

6、_FACE ;当然,我们也可以改变OpenGL 的设置,决定是对物体的正面还是背面进行隐藏。调用如下函数:glCullFac e(GL_FRO NT ;来隐藏正面,也可调用glCullFac e(GL_BACK ;来隐藏背面。如果你开启了光照渲染,并且为每个顶点指定了它的法线,在此过程中,OpenGL将根据顶点的法线和光源的位置及性质重新计算顶点的颜色。使用光照效果可以大大提高画面的真实性。我们将在第六章 中讲到光照。剪裁就是把那些不在视见空间,或者一半在可视空间中的物体剔除或剪裁,以保证不该出现在屏幕上的图形就不出现。要把一个3D 空间中的物体显示在屏幕上,就要进行投影。投影又有两种方式:平

7、行投影和透视投影。在平行投影中,远处的物体和近处的物体是一样大的,这种投影主要运用在计算机辅助设计(CAD )上,由于这种投影没有立体感,所以一般情况下使用透视投影。在透视投影中,远 处的物体会变得较小,因此在透视投影中,可视空间是一个平头截体(或台体)。下图表明了投影变换的原理。 当3D 空间中的图形经过投影成为2D 图形之后,我们还要把图形缩放到窗口或屏幕上。这个过程被称为视见空间变换。对于一般的游戏来说,视见空间应该是整个屏幕或窗体。但是视见空间也可以 是它的子集。2.2. 7 光栅化当2D 图形的所有变换都完成之后,就要把它们栅格化以显示在屏幕上,或保存为BMP 图片。栅格化其实是把变换得到的2D 矢量图转化为位图的过程。2.2. 8 绘制在这一步中,将由Wi n dows GDI 把光栅化的图形显示在屏幕上。2.3 OpenGL的命名规则在OpenGL1.1库中,包含了大约300多个API 函数。为了方便程序员记忆和使用,这些函数都按照一定的规则进行命名。例如,函数gl Ve rt e x 用于传入顶点数据,而gl Ve rt e x 又有gl Ve rt e x 2i , gl Ve rt e x 3f , gl Ve rt e x 2f , gl Ve rt e x 2d , gl V

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论