没有合适的资源?快使用搜索试试~ 我知道了~
opengl
资源推荐
资源详情
资源评论
一、OpenGL 与 3D 图形世界
1.1、OpenGL 使人们进入三维图形世界
我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三
维空间描绘这些物体。我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响
事业的成败,所以我们需要用一种最直接的形式来表示这些信息。
最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世
界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization) 技术。可视化
技术使人能够在三维图形世界中直接对具有形体的信息进行操作,和计算机直接交流。这种技术已经把人
和机器的力量以一种直觉而自然的方式加以统 一,这种革命性的变化无疑将极大地提高人们的工作效率。
可视化技术赋予人们一种仿真的、三维的并且具有实时交互的能力,这样人们可以在三维图形世界中用以
前不可想象的手段来获取信息或发挥自己创造性的思维。机械工程师可以从二维平面图中得以解放直接进
入三维世界,从而很快得到自己设计的三维机械零件模型。 医生可以从病人的三维扫描图象分析病人的病
灶。军事指挥员可以面对用三维图形技术生成的战场地形,指挥具有真实感的三维飞机、军舰、坦克向目
标开进并分析 战斗方案的效果。
更令人惊奇的是目前正在发展的虚拟现实技术,它能使人们进入一个三维的、多媒体的虚拟世界,人
们可以游历远古时代的城堡,也 可以遨游浩翰的太空。所有这些都依赖于计算机图形学、计算机可视化技
术的发展。人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视 化工具,其中
SGI 公司推出的 GL 三维图形库表现突出,易于使用而且功能强大。利用 GL 开发出来的三维应用软件颇
受许多专业技术人员的喜爱,这些三维应用 软件已涉及建筑、产品设计、医学、地球科学、流体力学等领
域。随着计算机技术的继续发展,GL 已经进一步发展成为 OpenGL,OpenGL 已被认为是高 性能图形和
交互式视景处理的标准,目前包括 ATT 公司 UNIX 软件实验室、IBM 公司、DEC 公司、SUN 公司、HP
公司、Microsoft 公司和 SGI 公司在内的几家在计算机市场占领导地位的大公司都采用了 OpenGL 图形
标准。
值得一提的是,由于 Microsoft 公司在 Windows NT 中提供 OpenGL 图形标准,OpenGL 将在微机
中广泛应用,尤其是 OpenGL 三维图形加速卡和微机图形工作站的推出,人们可以在微机上实现三维 图
形应用,如 CAD 设计、仿真模拟、三维游戏等,从而更有机会、更方便地使用 OpenGL 及其应用软件来
建立自己的三维图形世界。
1.2、OpenGL 提供直观的三维图形开发环境
OpenGL 实际上是一种图形与硬件的接口。它包括了 120 个图形函数,开发者可以用这些函数来建
立三维模型和进行三维实时交互。与其他图形程序设计接 口不同,OpenGL 提供了十分清晰明了的图形函
数,因此初学的程序设计员也能利用 OpenGL 的图形处理能力和 1670 万种色彩的调色板很快地设计出三
维图形以及三维交互软件。
OpenGL 强有力的图形函数不要求开发者把三维物体模型的数据写成固定的数据格式,这样开发者不
但可以直接使用自己的数据,而且可以利用其他不同格式的数据源。这种灵活性极大地节省了开发者的时
间,提高了软件开发效益。
长期以来,从事三维图形开发的技术人员都不得不在自己的程序中编写矩阵变换、外部设备访问等函
数,这样为调制这些与自己的软件开发目标关系并不十分密切的函数费脑筋,而 OpenGL 正是提供一种直
观的编程环境,它提供的一系列函数大大地简化了三维图形程序。例如:
� OpenGL 提供一系列的三维图形单元供开发者调用。
� OpenGL 提供一系列的图形变换函数。
� OpenGL 提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据
手套等这种直观的三维图形开发环境体现了 OpenGL 的技术优势,这也是许多三维图形开发者热
衷于 OpenGL 的缘由所在。
1.3、OpenGL 成为目前三维图形开发标准
OpenGL 成为目前三维图形开发标准在计算机发展初期,人们就开始从事计算机图形的开发。直到计
算机硬软件和计算机图形学高度发达的九十年代,人们发 现复杂的数据以视觉的形式表现时是最易理解的,
因而三维图形得以迅猛发展,于是各种三维图形工具软件包相继推出,如 PHIGS、PEX、 RenderMan
等。这些三维图形工具软件包有些侧重于使用方便,有些侧重于渲染效果或与应用软件的连接,但没有一
种三维工具软件包在交互式三维图形建 模能力、外部设备管理以及编程方便程度上能够 OpenGL 相比拟。
OpenGL 经过对 GL 的进一步发展,实现二维和三维的高级图形技术,在性 能上表现得异常优越,它
包括建模、变换、光线处理、色彩处理、动画以及更先进的能力,如纹理影射、物体运动模糊等。OpenGL
的这些能力为实现逼真的三 维渲染效果、建立交互的三维景观提供了优秀的软件工具。OpenGL 在硬件、
窗口、操作系统方面是相互独立的。
许多计算机公司已经把 OpenGL 集成到各种窗口和操作系统中,其中操作系统包括 UNIX、Windows
NT、DOS 等,窗口系统有 X 窗口、Windows 等。为了实现一个完整功能的图形处理系统,设计一个与
OpenGL 相关的系统结构为:其最底层是图形硬 件,第二层为操作系统,第三层为窗口系统,第四层为
OpenGL,第五层为应用软件。OpenGL 是网络透明的,在客户 — 服务器(Client-Server)体系结构中,
OpenGL 允许本地和远程绘图。所以在网络系统中,OpenGL 在 X 窗口、Windows 或其它窗口系统下都
可以以一个独立的图形窗口出现。
OpenGL 作为一个性能优越的图形应用程序设计界面(API) 而适合于广泛的计算环境,从个人计算
机到工作站和超级计算机,OpenGL 都能实现高性能的三维图形功能。由于许多在计算机界具有领导地位
的计算机公司纷 纷采用 OpenGL 作为三维图形应用程序设计界面,OpenGL 应用程序具有广泛的移植性。
因此,OpenGL 已成为目前的三维图形开发标准,是从事三维 图形开发工作的技术人员所必须掌握的开发
工具。
二、OpenGL 概念建立
2.1、OpenGL 基本理解
OpenGL 是一个与硬件图形发生器的软件接口,它包括了 100 多个图形操作函数,开发者可以利用
这些函数来构造景物模型、进行三维图形交互软件的开 发。正如上一章所述,OpenGL 是一个高性能的图
形开发软件包。OpenGL 支持网络,在网络系统中用户可以在不同的图形终端上运行程序显示图形。
OpenGL 作为一个与硬件独立的图形接口,它不提供与硬件密切相关的设备操作函数,同时,它也不提供
描述类似于飞机、汽车、分子形状等复杂形体的图形操 作函数。用户必须从点、线、面等最基本的图形单
元开始构造自己的三维模型。当然,象 OpenInventor 那样更高一级的基于 OpenGL 的三维图形建 模开
发软件包将提供方便的工具。因此 OpenGL 的图形操作函数十分基本、灵活。例如 OpenGL 中的模型绘
制过程就多种多样,内容十分丰 富,OpenGL 提供了以下的对三维物体的绘制方式:
� 网格线绘图方式(wireframe)
这种方式仅绘制三维物体的网格轮廓线。
� 深度优先网格线绘图方式(depth_cued)
用网格线方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗些。
� 反走样网格线绘图方式(antialiased)
用网格线方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐。
� 平面消隐绘图方式(flat_shade)
对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理。
� 光滑消隐绘图方式(smooth_shade)
对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实。
� 加阴影和纹理的绘图方式(shadows、textures)
在模型表面贴上纹理甚至于加上光照阴影,使得三维景观象照片一样。
� 运动模糊的绘图方式(motion-blured)
模拟物体运动时人眼观察所感觉的动感现象。
� 大气环境效果(atmosphere-effects)
在三维景观中加入如雾等大气环境效果,使人身临其境。
� 深度域效果(depth-of-effects)
类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。
这些三维物体绘图和特殊效果处理方式,说明 OpenGL 已经能够模拟比较复杂的三维物体或自然景观,
这就是我们所面对的 OpenGL。
2.2、OpenGL 工作流程
整个 OpenGL 的基本工作流程如下图:
其中几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、
逐个顶点操作等;图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的
处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment)处理直至把最后的光栅数据写入帧缓
冲器。在 OpenGL 中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得
到处理。OpenGL 中,显示列表技术是一项重要的技术。
OpenGL 要求把所有的几何图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每
个顶点进行计算和操作,然后进行光栅化形成图形碎片;对于象素数据,象素操作结果被存储在纹理组装
用的内存中,再象几何顶点操作一样光栅化形成图形片元。
整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值 BZ 送入帧缓冲
器实现图形的显示。
2.3、OpenGL 图形操作步骤
在上一节中说明了 OpenGL 的基本工作流程,根据这个流程可以归纳出在 OpenGL 中进行主要的图
形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤:
1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL 中把:点、线、
多边形、图像和位图都作为基本图形单元)。
2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。
3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式
等。
4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化
(rasterization)。
在这些步骤的执行过程中,OpenGL 可能执行其他的一些操作,例如自动消隐处理等。另外,景物光
栅化之后被送入帧缓冲器之前还可以根据需要对象素数据进行操作。
三、WindowsNT 下的 OpenGL
3.1、Windows NT 下的 OpenGL 函数
如前面的章节所述,Windows NT 下的 OpenGL 同样包含 100 多个库函数,这些函数都按一定的格
式来命名,即每个函数都以 gl 开头。Windows NT 下的 OpenGL 除了具有基本的 OpenGL 函数外,还
支持其他四类函数:
相应函数
具体说明
OpenGL 实用库
43 个函数,每个函数以 glu 开头。
OpenGL 辅助库
31 个函数,每个函数以 aux 开头。
Windows 专用库函数(WGL)
6 个函数,每个函数以 wgl 开头。
Win32 API 函数
5 个函数,函数前面没有专用前缀。
在 OpenGL 中有 115 个核心函数,这些函数是最基本的,它们可以在任何 OpenGL 的工作平台上应
用。这些函数用于建立各种各样的形体, 产生光照效果,进行反走样以及进行纹理映射,进行投影变换等
等。由于这些核心函数有许多种形式并能够接受不同类型的参数,实际上这些函数可以派生出 300 多个函
数。
OpenGL 的实用函数是比 OpenGL 核心函数更高一层的函数,这些函数是通过调用核心函数来起作
用的。这些函数提供了十分简单 的用法,从而减轻了开发者的编程负担。OpenGL 的实用函数包括纹理映
射、坐标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体(本指南 将详细讲述这些函
数的具体用法)等。这部分函数象核心函数一样在任何 OpenGL 平台都可以应用。
OpenGL 的辅助库是一些特殊的函数,这 些函数本来是用于初学者做简单的练习之用,因此这些函数
不能在所有的 OpenGL 平台上使用,在 Windows NT 环境下可以使用这些函数。这些函数使用简单,它
们可以用于窗口管理、输入输出处理以及绘制一些简单的三维形体。为了使 OpenGL 的应用程序具有良好
的移植性,在使用 OpenGL 辅助库的时候应谨慎。
6 个 WGL 函数是用于连接 OpenGL 与 Windows NT 的,这些函数用于在 Windows NT 环境下的
OpenGL 窗口能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等。这些函数把
Windows 与 OpenGL 揉合在一 起。最后的 5 个 Win32 函数用于处理象素存储格式和双缓冲区,显然这
些函数仅仅能够用于 Win32 系统而不能用于其它 OpenGL 平台。
3.2、OpenGL 基本功能
OpenGL 能够对整个三维模型进行渲染着色,从而绘制出与客观世界十分类似的三维景象。另外
OpenGL 还可以进行三维交互、动作模拟等。具体的功能主要有以下这些内容。
� 模型绘制
OpenGL 能够绘制点、线和多边形。应用这些基本的形体,我们可以构造出几乎所有的三维模型。
OpenGL 通常用模型的多边形的顶点来描述三维模型。如何通过多边形及其顶点来描述三维模型,
在指南的在后续章节会有详细的介绍。
� 模型观察
在 建立了三维景物模型后,就需要用 OpenGL 描述如何观察所建立的三维模型。观察三维模型
是通过一系列的坐标变换进行的。模型的坐标变换在使观察者能够在 视点位置观察与视点相适应
的三维模型景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,
不同的投影变换得到的三维模型的景象 也是不同的。最后的视窗变换则对模型的景象进行裁剪缩
放,即决定整个三维模型在屏幕上的图象。
� 颜色模式的指定
OpenGL 应用了一些专门的函数来指定三维模型的颜色。程序员可以选择二个颜色模式,即
RGBA 模式和颜色表模式。在 RGBA 模式中,颜色直接由 RGB 值来指定;在 颜色表模式中,颜
色值则由颜色表中的一个颜色索引值来指定。程序员还可以选择平面着色和光滑着色二种着色方
式对整个三维景观进行着色。
� 光照应用
用 OpenGL 绘制的三维模型必须加上光照才能更加与客观物体相似。OpenGL 提供了管理四种
光(辐射光、环境光、镜面光和漫反射光)的方法,另外还可以指定模型表面的反射特性。
� 图象效果增强
OpenGL 提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和雾化来
增强图象的效果。反走样用于改善图象中线段图形的锯齿而更平滑,混合用于处理模型的半透明
效果,雾使得影像从视点到远处逐渐褪色,更接近于真实。
� 位图和图象处理
OpenGL 还提供了专门对位图和图象进行操作的函数。
� 纹理映射
三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL 提供
了纹理映射的功能。OpenGL 提供的一系列纹理映射函数使得开发者可以十分方便地把真实图象
贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。
� 实时动画
为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内存拷贝
剩余64页未读,继续阅读
资源评论
omygodvv
- 粉丝: 503
- 资源: 1798
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功