OpenGL编程指南.docx
《OpenGL编程指南.docx》由会员分享,可在线阅读,更多相关《OpenGL编程指南.docx(49页珍藏版)》请在冰豆网上搜索。
OpenGL编程指南
OpenGL基础图形编程-总目录
出处:
中国游戏开发者
[2001-09-20]
作者:
总目录
第一章OpenGL与三维图形世界
1.1OpenGL使人们进入三维图形世界
1.2OpenGL提供直观的三维图形开发环境
1.3OpenGL称为目前三维图形开发标准
第二章OpenGL概念建立
2.1OpenGL基本理解
2.2OpenGL工作流程
2.3OpenGL图形操作步骤
第三章WindowsNT环境下的OpenGL
3.1WindowsNT下的OpenGL函数
3.2OpenGL基本功能
3.3WindowsNT下OpenGL结构
第四章OpenGL基本程序结构
第五章OpenGL数据类型和函数名
第六章OpenGL辅助库的基本使用
6.1辅助库函数分类
6.2辅助库应用示例
第七章OpenGL建模
7.1描述图元
7.1.1齐次坐标
7.1.2点
7.1.3线
7.1.4多边形
7.2绘制图元
7.2.1定义顶点
7.2.2构造几何图元
第八章OpenGL变换
8.1从三维空间到二维平面
8.1.1相机模拟
8.1.2三维图形显示流程
8.1.3基本变换简单分析
8.2几何变换
8.2.1两个矩阵函数解释
8.2.2平移
8.2.3旋转
8.2.4缩放和反射
8.2.5几何变换举例
8.3投影变换
8.3.1正射投影
8.3.2透视投影
8.4裁剪变换
8.5视口变换
8.6堆栈操作
第九章OpenGL颜色
9.1计算机颜色
9.1.1颜色生成原理
9.1.2RGB色立体
9.2颜色模式
9.2.1RGBA模式
9.2.2颜色表模式
9.2.3两种模式应用场合
9.3颜色应用举例
第十章OpenGL光照
10.1真实感图形基本概念
10.2光照模型
10.2.1简单光照模型
10.2.2OpenGL光组成
10.2.3创建光源
10.2.4启动光照
10.3明暗处理
10.4材质
10.4.1材质颜色
10.4.2材质定义
10.4.3材质RGB值和光源RGB值的关系
10.4.4材质改变
第十一章OpenGL位图和图像
11.1位图
11.1.1位图和字符
11.1.2当前光栅位置
11.1.3位图显示
11.2图像
11.2.1象素读写
11.2.2象素拷贝
11.2.3图像缩放
11.2.4图像例程
第十二章OpenGL纹理
12.1基本步骤
12.2纹理定义
12.3纹理控制
12.3.1滤波
12.3.2重复与约简
12.4映射方式
12.5纹理坐标
12.5.1坐标定义
12.5.2坐标自动产生
第十三章OpenGL复杂物体建模
13.1图元扩展
13.1.1点和线
13.1.2多边形
13.2法向计算
13.2.1法向基本计算方法
13.2.2法向定义
13.3曲线生成
13.3.1曲线绘制举例
13.3.2曲线定义和启动
13.3.3曲线坐标计算
13.3.4定义均匀间隔曲线坐标值
13.4曲面构造
13.4.1曲面定义和坐标计算
13.4.2定义均匀间隔的曲面坐标值
13.4.3纹理曲面
13.4.4NURBS曲面
第十四章OpenGL特殊光处理
14.1光照模型
14.1.1全局环境光
14.1.2近视点与无穷远视点
14.1.3双面光照
14.2光源位置与衰减
14.3聚光与多光源
14.3.1聚光
14.3.2多光源与例程
14.4光源位置与方向的控制
14.5辐射光
第十五章OpenGL效果处理
15.1融合
15.1.1Alpha值与融合
15.1.2融合因子
15.1.3融合实例
15.2反走样
15.2.1行为控制函数
15.2.2点和线的反走样
15.2.3多边形的反走样
15.3雾
15.3.1雾的概论和例程
15.3.2雾化步骤
第十六章OpenGL显示列表
16.1显示列表概论
16.1.1显示列表的优势
16.1.2显示列表的适用场合
16.2创建和执行显示列表
16.2.1创建显示列表
16.2.2执行显示列表
16.3管理显示列表
16.4多级显示列表
第十七章OpenGL帧缓存和动画
17.1帧缓存
17.1.1帧缓存组成
17.1.2缓存清除
17.2动画
【下页】
【打印】【关闭】
[字号:
大·中·小]
OpenGL基础图形编程-OpenGL与3D图形世界
出处:
中国游戏开发者
[2001-09-20]
作者:
目录
1.1OpenGL使人们进入三维图形世界
1.2OpenGL提供直观的三维图形开发环境
1.3OpenGL成为目前三维图形开发标准
1.1、OpenGL使人们进入三维图形世界
我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。
我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响事业的成败,所以我们需要用一种最直接的形式来表示这些信息。
最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术。
可视化技术使人能够在三维图形世界中直接对具有形体的信息进行操作,和计算机直接交流。
这种技术已经把人和机器的力量以一种直觉而自然的方式加以统一,这种革命性的变化无疑将极大地提高人们的工作效率。
可视化技术赋予人们一种仿真的、三维的并且具有实时交互的能力,这样人们可以在三维图形世界中用以前不可想象的手段来获取信息或发挥自己创造性的思维。
机械工程师可以从二维平面图中得以解放直接进入三维世界,从而很快得到自己设计的三维机械零件模型。
医生可以从病人的三维扫描图象分析病人的病灶。
军事指挥员可以面对用三维图形技术生成的战场地形,指挥具有真实感的三维飞机、军舰、坦克向目标开进并分析战斗方案的效果。
更令人惊奇的是目前正在发展的虚拟现实技术,它能使人们进入一个三维的、多媒体的虚拟世界,人们可以游历远古时代的城堡,也可以遨游浩翰的太空。
所有这些都依赖于计算机图形学、计算机可视化技术的发展。
人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中SGI公司推出的GL三维图形库表现突出,易于使用而且功能强大。
利用GL开发出来的三维应用软件颇受许多专业技术人员的喜爱,这些三维应用软件已涉及建筑、产品设计、医学、地球科学、流体力学等领域。
随着计算机技术的继续发展,GL已经进一步发展成为OpenGL,OpenGL已被认为是高性能图形和交互式视景处理的标准,目前包括ATT公司UNIX软件实验室、IBM公司、DEC公司、SUN公司、HP公司、Microsoft公司和SGI公司在内的几家在计算机市场占领导地位的大公司都采用了OpenGL图形标准。
值得一提的是,由于Microsoft公司在WindowsNT中提供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、WindowsNT、DOS等,窗口系统有X窗口、Windows等。
为了实现一个完整功能的图形处理系统,设计一个与OpenGL相关的系统结构为:
其最底层是图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为应用软件。
OpenGL是网络透明的,在客户—服务器(Client-Server)体系结构中,OpenGL允许本地和远程绘图。
所以在网络系统中,OpenGL在X窗口、Windows或其它窗口系统下都可以以一个独立的图形窗口出现。
OpenGL作为一个性能优越的图形应用程序设计界面(API)而适合于广泛的计算环境,从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。
由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,OpenGL应用程序具有广泛的移植性。
因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。
【上页】【下页】
【打印】【关闭】
页首·目录·报错·后退
[字号:
大·中·小]
OpenGL基础图形编程-OpenGL概念建立
出处:
中国游戏开发者
[2001-09-21]
作者:
目录
2.1OpenGL基本理解
2.2OpenGL工作流程
2.3OpenGL图形操作步骤
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的基本工作流程如下图:
图2-1OpenGL基本工作流程
其中几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、逐个顶点操作等;图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment)处理直至把最后的光栅数据写入帧缓冲器。
在OpenGL中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得到处理。
OpenGL中,显示列表技术是一项重要的技术。
OpenGL要求把所有的几何图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片;对于象素数据,象素操作结果被存储在纹理组装用的内存中,再象几何顶点操作一样光栅化形成图形片元。
整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值BZ送入帧缓冲器实现图形的显示。
2.3、OpenGL图形操作步骤
在上一节中说明了OpenGL的基本工作流程,根据这个流程可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤:
1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把:
点、线、多边形、图像和位图都作为基本图形单元)。
2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。
3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。
4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization)。
在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。
另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对象素数据进行操作。
【上页】【下页】
【打印】【关闭】
页首·目录·报错·后退
[字号:
大·中·小]
OpenGL基础图形编程-WindowsNT环境下的OpenGL
出处:
中国游戏开发者
[2001-09-23]
作者:
目录
3.1OpenGL的函数
3.2OpenGL基本功能
3.3OpenGL的结构
3.1、WindowsNT下的OpenGL函数
如前面的章节所述,WindowsNT下的OpenGL同样包含100多个库函数,这些函数都按一定的格式来命名,即每个函数都以gl开头。
WindowsNT下的OpenGL除了具有基本的OpenGL函数外,还支持其他四类函数:
相应函数
具体说明
OpenGL实用库
43个函数,每个函数以glu开头。
OpenGL辅助库
31个函数,每个函数以aux开头。
Windows专用库函数(WGL)
6个函数,每个函数以wgl开头。
Win32API函数
5个函数,函数前面没有专用前缀。
表2-1
在OpenGL中有115个核心函数,这些函数是最基本的,它们可以在任何OpenGL的工作平台上应用。
这些函数用于建立各种各样的形体,产生光照效果,进行反走样以及进行纹理映射,进行投影变换等等。
由于这些核心函数有许多种形式并能够接受不同类型的参数,实际上这些函数可以派生出300多个函数。
OpenGL的实用函数是比OpenGL核心函数更高一层的函数,这些函数是通过调用核心函数来起作用的。
这些函数提供了十分简单的用法,从而减轻了开发者的编程负担。
OpenGL的实用函数包括纹理映射、坐标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体(本指南将详细讲述这些函数的具体用法)等。
这部分函数象核心函数一样在任何OpenGL平台都可以应用。
OpenGL的辅助库是一些特殊的函数,这些函数本来是用于初学者做简单的练习之用,因此这些函数不能在所有的OpenGL平台上使用,在WindowsNT环境下可以使用这些函数。
这些函数使用简单,它们可以用于窗口管理、输入输出处理以及绘制一些简单的三维形体。
为了使OpenGL的应用程序具有良好的移植性,在使用OpenGL辅助库的时候应谨慎。
6个WGL函数是用于连接OpenGL与WindowsNT的,这些函数用于在WindowsNT环境下的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提供的一系列纹理映射函数使得开发者可以十分方便地把真实图象贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。
*实时动画
为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内存拷贝到屏幕上,这就是OpenGL的双缓存技术(doublebuffer)。
OpenGL提供了双缓存技术的一系列函数。
*交互技术
目前有许多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户可以选择修改三维景观中的物体。
3.3、WindowsNT下OpenGL的结构
OpenGL的作用机制是客户(client)/服务器(sever)机制,即客户(用OpenGL绘制景物的应用程序)向服务器(即OpenGL内核)发布OpenGL命令,服务器则解释这些命令。
大多数情况下,客户和服务器在同一机器上运行。
正是OpenGL的这种客户/服务器机制,OpenGL可以十分方便地在网络环境下使用。
因此WindowsNT下的OpenGL是网络透明的。
正象Windows的图形设备接口(GDI)把