OpenGL技术教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《OpenGL技术教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 技术 教学 课件
- 资源描述:
-
1、第第10章章 OpenGL10.1 简介简介10.2 OpenGL基本程序结构基本程序结构10.3 OpenGL程序设计入门程序设计入门10.1 简介简介10.1.1 什么是什么是OpenGL?OpenGL是一个功能强大的是一个功能强大的开放开放图形库图形库(Open Graphics Library)。其。其前身是前身是SGI公司为其图形公司为其图形工作站开发的工作站开发的IRIS GL。为使其能够更加容易地。为使其能够更加容易地移植到不同的硬件和操作系统,移植到不同的硬件和操作系统,SGI开发了开发了OpenGL。OpenGL被打造为开放性标准,任何软硬件厂商被打造为开放性标准,任何软硬件
2、厂商均可自由使用,这让它受到广泛的欢迎。均可自由使用,这让它受到广泛的欢迎。1992年7月,SGI正式发布OpenGL 1.0标准。OpenGL 1.0完全实现了SGI的预期设计目标:功能强大、移植性良好并能自由使用。SGI和微软进行首次合作、联手将OpenGL 1.0移植到Windows NT平台。1995年,SGI推出了更为完善的OpenGL 1.1版本。OpenGL 1.1的性能比1.0版提高甚多,同时还加入了诸如顶点数组、顶点位置、新纹理等新特性,并增强了元文件对OpenGL的调用等等。OpenGL 1.1同样获得了成功,而它也有对应的Windows NT版本。1992年成立的独立财团
3、OpenGL Architecture Review Board(ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL。1995年12月ARB批准了1.1版本,1999.5通过的1.2.1。2003年的7月,ARB公布OpenGL 1.5规范这也是迄今为止最新的OpenGL版本。10.1.2 OpenGL的特点的特点从程序开发人员的角度来看,从程序开发人员的角度来看,OpenGL是一组是一组绘图命令的绘图命令的API集合。利用这些集合。利用这些API能够
4、方便地能够方便地描述二维和三维几何物体,并控制这些物体按描述二维和三维几何物体,并控制这些物体按某种方式绘制到显示缓冲区中。某种方式绘制到显示缓冲区中。OpenGL的的API集提供了物体描述、平移、旋转、缩放、光照、集提供了物体描述、平移、旋转、缩放、光照、纹理、材质、像素、位图、文字、交互以及提纹理、材质、像素、位图、文字、交互以及提高显示性能等方面的功能,基本涵盖了开发二、高显示性能等方面的功能,基本涵盖了开发二、三维图形程序所需的各个方面。与一般的图形三维图形程序所需的各个方面。与一般的图形开发工具相比,开发工具相比,OpenGL具有以下几个突出特具有以下几个突出特点点:(1 1)跨平台
5、特性)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。与硬件、窗口和操作系统是相互独立的。为了构成一个完整功能的图形处理系统,其设计实现为了构成一个完整功能的图形处理系统,其设计实现共分共分 5 5 层:图形硬件、操作系统、窗口系统、层:图形硬件、操作系统、窗口系统、OpenGL和应用软件。和应用软件。因而,因而,OpenGL可以集成到各种标准窗口和操作可以集成到各种标准窗口和操作系统中。例如,操作系统包括系统中。例如,操作系统包括UNIX,Windows NT,Windows 95/98,DOS等;窗口系统包括等;窗口系统包括X Windows,Microsoft Windows
6、等。等。(2)应用的广泛性应用的广泛性OpenGL是目前最主要的二、三维交互式图形应用程是目前最主要的二、三维交互式图形应用程序开发环境,已成为业界最受推荐的图形应用编程接序开发环境,已成为业界最受推荐的图形应用编程接口。自从口。自从1992年发表以来,年发表以来,OpenGL已被广泛地应用已被广泛地应用于于CAD/CAM、三维动画、数字图像处理以及虚拟现、三维动画、数字图像处理以及虚拟现实等领域,实等领域,Kinetix公司的公司的3D Studio Max就是突出的就是突出的代表。无论是在代表。无论是在PC机上,还是在工作站甚至是大型机上,还是在工作站甚至是大型机和超级计算机上,机和超级计
7、算机上,OpenGL都能表现出它的高性能都能表现出它的高性能和强大威力。和强大威力。(3)网络透明性网络透明性 建立在客户建立在客户/服务器模型上的网络透明性是服务器模型上的网络透明性是OpenGL的固有特性,它允许一个运行在工作站上的的固有特性,它允许一个运行在工作站上的进程在本机或通过网络在远程工作站上显示图形。利进程在本机或通过网络在远程工作站上显示图形。利用这种性质能够均衡各工作站的工作负荷用这种性质能够均衡各工作站的工作负荷,共同承担共同承担图形应用任务。图形应用任务。(4)高质量和高性能高质量和高性能 无论是在无论是在CAD/CAM、三维动画还是可视化仿真、三维动画还是可视化仿真等
8、领域,等领域,OpenGL高质量和高效率的图形生成能力都高质量和高效率的图形生成能力都能得到充分的体现。在这些领域中,开发人员可以利能得到充分的体现。在这些领域中,开发人员可以利用用OpenGL制作出效果逼真的二、三维图像来。制作出效果逼真的二、三维图像来。(5)出色的编程特性出色的编程特性 OpenGL在各种平台上已有多年的应用实在各种平台上已有多年的应用实践,加上严格的规范控制,因此践,加上严格的规范控制,因此OpenGL具有具有良好的稳定性。良好的稳定性。OpenGL具有充分的独立性与易使用性等。具有充分的独立性与易使用性等。10.2 OpenGL基本程序结构基本程序结构 Windows
9、 95/98以及以及Windows NT 3.51 以上的操以上的操作系统中提供了作系统中提供了OpenGL的动态库,在的动态库,在VC+2.0 以上的版本中提供了以上的版本中提供了OpenGL的静态库,所以,的静态库,所以,使用使用OpenGL编程,在微机上使用时,最好是编程,在微机上使用时,最好是在上述软件环境中编写在上述软件环境中编写OpenGL程序。程序。在微机版本中,在微机版本中,OpenGL 提供了三个函数库,提供了三个函数库,它们是基本库、实用库和辅助库。它们是基本库、实用库和辅助库。10.2.1 Windows系统下的系统下的OpenGL函数函数OpenGL的基本库是的基本库是
10、OpenGL的核心函数库,在这的核心函数库,在这个函数库中,提供了个函数库中,提供了115个函数,这些函数都是以个函数,这些函数都是以“gl”为前缀。为前缀。这类这类API的主要功能包括物体描述、的主要功能包括物体描述、平移、旋转、缩放、光照、纹理、材质、像素、位平移、旋转、缩放、光照、纹理、材质、像素、位图、文字处理等。图、文字处理等。所有所有OpenGL 提供的操作都可以使用这些函数来实提供的操作都可以使用这些函数来实现,而且,对于不同的软件和硬件平台,这些函数现,而且,对于不同的软件和硬件平台,这些函数的使用是完全相同的,这个特性注定了的使用是完全相同的,这个特性注定了OpenGL程程序
11、完美的可移植性。序完美的可移植性。OpenGL的实用库是的实用库是OpenGL基本库的一套子程序,基本库的一套子程序,它提供了它提供了43个函数,这些函数都是以个函数,这些函数都是以”glu”为前缀。为前缀。基本的基本的OpenGL不支持传统上同图形标准相关的一不支持传统上同图形标准相关的一些几何对象,为了减少一些编程负担,些几何对象,为了减少一些编程负担,OpenGL提提供了实用库。供了实用库。主要功能包括绘制二次曲面、主要功能包括绘制二次曲面、NURBS曲线曲面、复杂多边形以及纹理、矩阵管曲线曲面、复杂多边形以及纹理、矩阵管理等。理等。实用库中的所有函数全都是由实用库中的所有函数全都是由O
12、penGL基本库函数基本库函数来编写的,所以,在使用上和来编写的,所以,在使用上和OpenGL基本库的使基本库的使用是完全相同的,而且,用户也可以使用基本函用是完全相同的,而且,用户也可以使用基本函数库来实现实用库的函数功能。数库来实现实用库的函数功能。OpenGL的辅助库是为了方便用户用标准的辅助库是为了方便用户用标准C编写编写OpenGL程序而编写的。程序而编写的。OpenGL是一个图形标准,所以,在是一个图形标准,所以,在OpenGL中没有提供窗口管理和消息事件响应的函数,中没有提供窗口管理和消息事件响应的函数,这样使用标准这样使用标准C 编写编写OpenGL程序是很不方便的,所以程序是
13、很不方便的,所以提供了辅助库。提供了辅助库。它提供了它提供了31个函数,这些函数都是以个函数,这些函数都是以“aux”为前缀。为前缀。OpenGL辅助库提供了一些基本的窗口辅助库提供了一些基本的窗口管理函数、事件处理函数和一些简单模型的制作函数等,管理函数、事件处理函数和一些简单模型的制作函数等,例如,定义窗口的大小、处理键盘时间、鼠标击键事件、例如,定义窗口的大小、处理键盘时间、鼠标击键事件、绘制多面体等等。绘制多面体等等。10.2.2 一个简单的一个简单的OpenGL程序程序下面将通过一个简单的下面将通过一个简单的OpenGL 程序来说明程序来说明OpenGL头文头文件的使用、语法规则、程
14、序的基本结构、程序的运行环件的使用、语法规则、程序的基本结构、程序的运行环境配置。境配置。例例10.1 OpenGL 例程例程 sample.c#include#include#include#include#include void myinit(void);void CALLBACK myReshape(int w,int h);void CALLBACK display(void);void myinit(void)/初始化初始化glClearColor(0.0,0.0,0.0,0.0);/将窗口清为黑色将窗口清为黑色void CALLBACK display(void)glClear(
15、GL_COLOR_BUFFER_BIT);/将颜色缓存清为将颜色缓存清为glClearColor命令所设置的颜色,即背景色命令所设置的颜色,即背景色glColor4f(0.2,0.8,1.0,1.0);/选颜色选颜色(R,G,B)glRotatef(30,1.0,1.0,0.0);/做旋转变换做旋转变换auxWireCube(1.0);/绘制六面体的虚线图绘制六面体的虚线图glFlush();/强制绘图,不驻留缓存强制绘图,不驻留缓存 void CALLBACK myReshape(int w,int h)/用于窗口大小改变时的处理,用于窗口大小改变时的处理,与绘图无关与绘图无关glViewp
16、ort(0,0,w,h);void main(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);/窗口显示单缓存和窗口显示单缓存和RGB(彩色彩色)模式模式auxInitPosition(0,0,200,200);/大小大小 x=200 y=200 (0,0)是屏幕左上点是屏幕左上点auxInitWindow(“openglsample.c”);/初始化窗口,参数是标题初始化窗口,参数是标题myinit();auxReshapeFunc(myReshape);auxMainLoop(display);1.头文件使用头文件使用若应用程序使用若应用程序使用O
17、penGL核心函数,应包括头文核心函数,应包括头文件件;使用使用GLU库函数,应包括头文件库函数,应包括头文件;使用使用AUX库函数,应包括头文件库函数,应包括头文件;使用使用WGL和和Win32应包括头文件应包括头文件。2.回调(回调(CALLBACK)函数)函数CALLBACK函数是一些用来让系统调用的函数,函数是一些用来让系统调用的函数,系统调用它们来实现显示、接受输入事件功能。系统调用它们来实现显示、接受输入事件功能。3.语法规则语法规则OpenGL基本库的所有操作函数都是以基本库的所有操作函数都是以“gl”为前缀的。为前缀的。实用库的所有操作函数都是以实用库的所有操作函数都是以“gl
18、u”为前缀。辅助库的为前缀。辅助库的所有操作函数都是以所有操作函数都是以“aux”为前缀的。为前缀的。OpenGL命令带命令带有后缀。有后缀。以以sample.c中的中的glColor4f为例,前缀为例,前缀“gl”指这个函数是指这个函数是OpenGL的核心库函数,组成命令的单词首字母大写,的核心库函数,组成命令的单词首字母大写,如如“Color”;后缀;后缀“4”表示颜色值是由表示颜色值是由4个变量来表示个变量来表示的;的;“f”表示所表示颜色的每个分量的类型为表示所表示颜色的每个分量的类型为32位浮点位浮点数。数。OpenGL核心库函数常量是以核心库函数常量是以“GL_”开头,均用大写开头
19、,均用大写字母,并用下划线将每个关键词分开,如字母,并用下划线将每个关键词分开,如GL_COLOR_BUFFER_BIT。4.程序的基本结构程序的基本结构 一个一个OpenGL程序的基本结构是很简单的,无论多么复杂程序的基本结构是很简单的,无论多么复杂的的OpenGL程序,可以大致分解成以下部分:程序,可以大致分解成以下部分:(1)定义窗口)定义窗口Windows 系统下的系统下的OpenGL实现提供了一个辅助函数库实现提供了一个辅助函数库aux,用于解决开窗口和处理输入事件等问题。用于解决开窗口和处理输入事件等问题。窗口管理函数:窗口管理函数:首先,调用首先,调用void auxInitDi
20、splayMode(Glbitfield mask)函函数定义窗口的特性,如颜色和缓存区的性质。例如:数定义窗口的特性,如颜色和缓存区的性质。例如:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);/窗口显示单缓存和窗口显示单缓存和RGB(彩色彩色)模式模式其次,调用其次,调用void auxInitPosition(Glint x,Glint y,Glint width,Glint height)定义窗口在屏幕上的位置和大小。其定义窗口在屏幕上的位置和大小。其中,中,x,y为窗口左上角的坐标,为窗口左上角的坐标,width,height 分别为窗口的分别为窗口的
21、宽和高宽和高(像素个数像素个数)。默认值为。默认值为(0,0,100,100)。例如:。例如:auxInitPosition(0,0,200,200);/大小大小 x=200 y=200 (0,0)是屏幕左上点是屏幕左上点最后,完成上述两个函数调用后,用函数最后,完成上述两个函数调用后,用函数void auxInitWindow(Glbyte*titleString)打开窗口。窗口的标打开窗口。窗口的标题为字符串题为字符串titleString。窗口把。窗口把ESC键与退出函数联系起键与退出函数联系起来,可以用来关闭窗口,退出程序。例如:来,可以用来关闭窗口,退出程序。例如:auxInitWi
22、ndow(“openglsample.c”);/初始化窗口,参数是标题初始化窗口,参数是标题处理输入事件处理输入事件:当改变窗口尺寸、移动窗口、重新显示窗口时,当改变窗口尺寸、移动窗口、重新显示窗口时,由由auxReshapeFunc(myReshape)调用函数调用函数myReshape重新定义窗口属性。重新定义窗口属性。通常通常myReshape函数调用函数调用glViewPort函数,对当函数,对当前图形进行裁剪,重新定义投影矩阵等。前图形进行裁剪,重新定义投影矩阵等。OpenGL辅助函数库中还包括处理键盘和鼠标输辅助函数库中还包括处理键盘和鼠标输入事件的函数。入事件的函数。(2)初始化
23、操作)初始化操作由于由于OpenGL的绘图方式是由一系列的状态确定的,因而在绘的绘图方式是由一系列的状态确定的,因而在绘制图形前需要做一些准备工作,包括制图形前需要做一些准备工作,包括清缓存区(清缓存区(buffer)、定)、定义光照模型、定义纹理映射等基本操作的初始化状态、设置义光照模型、定义纹理映射等基本操作的初始化状态、设置三维视景体、定义视口。三维视景体、定义视口。例如:例如:glClearColor(0.0,0.0,0.0,0.0);/将窗口清为黑色将窗口清为黑色glClear(GL_COLOR_BUFFER_BIT);/将颜色缓存清为将颜色缓存清为glClearColor命令所设置
24、的颜色,即背景色命令所设置的颜色,即背景色(3)设置观察坐标系下的取景模式和取景框位置及大小设置观察坐标系下的取景模式和取景框位置及大小主要利用了三个函数:主要利用了三个函数:函数函数void glViewport(GLint x,Glint y,Glsizei width,Glsizei height):设置在屏幕上的视口大小,四个参数描述:设置在屏幕上的视口大小,四个参数描述屏幕视口四个角上的坐标(以像素表示)。屏幕视口四个角上的坐标(以像素表示)。参数参数(x,y)用于指定视口的左下角在窗口坐标系中的位置,用于指定视口的左下角在窗口坐标系中的位置,参数参数width和和height分别确
25、定矩形视口的宽和高,均以像素分别确定矩形视口的宽和高,均以像素为单位为单位。注意:视口的大小和尺寸是在窗口坐标系中进行度量的,注意:视口的大小和尺寸是在窗口坐标系中进行度量的,默认状态下其坐标原点位于窗口的左下角,其尺寸与窗口默认状态下其坐标原点位于窗口的左下角,其尺寸与窗口的大小相同。的大小相同。视点方向观察体积 函数函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体是一个各面均为矩形的六面体。函数函数void gluPerspec
展开阅读全文