OpenGL技术教学ppt课件.ppt
《OpenGL技术教学ppt课件.ppt》由会员分享,可在线阅读,更多相关《OpenGL技术教学ppt课件.ppt(106页珍藏版)》请在三一办公上搜索。
1、第10章 OpenGL,10.1 简介10.2 OpenGL基本程序结构10.3 OpenGL程序设计入门,10.1 简介,10.1.1 什么是OpenGL?OpenGL是一个功能强大的开放图形库(Open Graphics Library)。其前身是SGI公司为其图形工作站开发的IRIS GL。为使其能够更加容易地移植到不同的硬件和操作系统,SGI开发了OpenGL。OpenGL被打造为开放性标准,任何软硬件厂商均可自由使用,这让它受到广泛的欢迎。,1992年7月,SGI正式发布OpenGL 1.0标准。OpenGL 1.0完全实现了SGI的预期设计目标:功能强大、移植性良好并能自由使用。S
2、GI和微软进行首次合作、联手将OpenGL 1.0移植到Windows NT平台。1995年,SGI推出了更为完善的OpenGL 1.1版本。OpenGL 1.1的性能比1.0版提高甚多,同时还加入了诸如顶点数组、顶点位置、新纹理等新特性,并增强了元文件对OpenGL的调用等等。OpenGL 1.1同样获得了成功,而它也有对应的Windows NT版本。,1992年成立的独立财团OpenGL Architecture Review Board(ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了A
3、RB规范全部测试的实现才能称为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能够方便地描述二维和三维几何物体,并控制这些物体按某种方式绘制到显示缓冲区中。OpenGL的API集提供了物体描述、平移、旋转、缩放、光照、纹理、材质、像素、位图、文字、交互以及提高显示性能等方面的功能,基本涵盖了开发二、三维图形程序所需的各个方面。与一般的图形开发工具相比,Ope
4、nGL具有以下几个突出特点:,(1)跨平台特性 OpenGL与硬件、窗口和操作系统是相互独立的。为了构成一个完整功能的图形处理系统,其设计实现共分 5 层:图形硬件、操作系统、窗口系统、OpenGL和应用软件。因而,OpenGL可以集成到各种标准窗口和操作系统中。例如,操作系统包括UNIX,Windows NT,Windows 95/98,DOS等;窗口系统包括X Windows,Microsoft Windows等。,(2)应用的广泛性OpenGL是目前最主要的二、三维交互式图形应用程序开发环境,已成为业界最受推荐的图形应用编程接口。自从1992年发表以来,OpenGL已被广泛地应用于CAD
5、/CAM、三维动画、数字图像处理以及虚拟现实等领域,Kinetix公司的3D Studio Max就是突出的代表。无论是在PC机上,还是在工作站甚至是大型机和超级计算机上,OpenGL都能表现出它的高性能和强大威力。,(3)网络透明性 建立在客户/服务器模型上的网络透明性是OpenGL的固有特性,它允许一个运行在工作站上的进程在本机或通过网络在远程工作站上显示图形。利用这种性质能够均衡各工作站的工作负荷,共同承担图形应用任务。(4)高质量和高性能 无论是在CAD/CAM、三维动画还是可视化仿真等领域,OpenGL高质量和高效率的图形生成能力都能得到充分的体现。在这些领域中,开发人员可以利用Op
6、enGL制作出效果逼真的二、三维图像来。,(5)出色的编程特性 OpenGL在各种平台上已有多年的应用实践,加上严格的规范控制,因此OpenGL具有良好的稳定性。OpenGL具有充分的独立性与易使用性等。,10.2 OpenGL基本程序结构,Windows 95/98以及Windows NT 3.51 以上的操作系统中提供了OpenGL的动态库,在VC+2.0 以上的版本中提供了OpenGL的静态库,所以,使用OpenGL编程,在微机上使用时,最好是在上述软件环境中编写OpenGL程序。在微机版本中,OpenGL 提供了三个函数库,它们是基本库、实用库和辅助库。,10.2.1 Windows系
7、统下的OpenGL函数,OpenGL的基本库是OpenGL的核心函数库,在这个函数库中,提供了115个函数,这些函数都是以“gl”为前缀。这类API的主要功能包括物体描述、平移、旋转、缩放、光照、纹理、材质、像素、位图、文字处理等。所有OpenGL 提供的操作都可以使用这些函数来实现,而且,对于不同的软件和硬件平台,这些函数的使用是完全相同的,这个特性注定了OpenGL程序完美的可移植性。,OpenGL的实用库是OpenGL基本库的一套子程序,它提供了43个函数,这些函数都是以”glu”为前缀。基本的OpenGL不支持传统上同图形标准相关的一些几何对象,为了减少一些编程负担,OpenGL提供了
8、实用库。主要功能包括绘制二次曲面、NURBS曲线曲面、复杂多边形以及纹理、矩阵管理等。实用库中的所有函数全都是由OpenGL基本库函数来编写的,所以,在使用上和OpenGL基本库的使用是完全相同的,而且,用户也可以使用基本函数库来实现实用库的函数功能。,OpenGL的辅助库是为了方便用户用标准C编写OpenGL程序而编写的。OpenGL是一个图形标准,所以,在OpenGL中没有提供窗口管理和消息事件响应的函数,这样使用标准C 编写OpenGL程序是很不方便的,所以提供了辅助库。它提供了31个函数,这些函数都是以“aux”为前缀。OpenGL辅助库提供了一些基本的窗口管理函数、事件处理函数和一些
9、简单模型的制作函数等,例如,定义窗口的大小、处理键盘时间、鼠标击键事件、绘制多面体等等。,10.2.2 一个简单的OpenGL程序,下面将通过一个简单的OpenGL 程序来说明OpenGL头文件的使用、语法规则、程序的基本结构、程序的运行环境配置。例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)/初始化glClea
10、rColor(0.0,0.0,0.0,0.0);/将窗口清为黑色void CALLBACK display(void)glClear(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)/用于窗口大小改变时的处理,与绘图无关glVie
11、wport(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.头文件使用,若应用程序使用OpenGL核心函数,应包括头文件;使用GLU库函数,应包括头文件;使用AUX库函
12、数,应包括头文件;使用WGL和Win32应包括头文件。,2.回调(CALLBACK)函数CALLBACK函数是一些用来让系统调用的函数,系统调用它们来实现显示、接受输入事件功能。,3.语法规则,OpenGL基本库的所有操作函数都是以“gl”为前缀的。实用库的所有操作函数都是以“glu”为前缀。辅助库的所有操作函数都是以“aux”为前缀的。OpenGL命令带有后缀。以sample.c中的glColor4f为例,前缀“gl”指这个函数是OpenGL的核心库函数,组成命令的单词首字母大写,如“Color”;后缀“4”表示颜色值是由4个变量来表示的;“f”表示所表示颜色的每个分量的类型为32位浮点数。
13、OpenGL核心库函数常量是以“GL_”开头,均用大写字母,并用下划线将每个关键词分开,如GL_COLOR_BUFFER_BIT。,4.程序的基本结构 一个OpenGL程序的基本结构是很简单的,无论多么复杂的OpenGL程序,可以大致分解成以下部分:(1)定义窗口Windows 系统下的OpenGL实现提供了一个辅助函数库aux,用于解决开窗口和处理输入事件等问题。窗口管理函数:首先,调用void auxInitDisplayMode(Glbitfield mask)函数定义窗口的特性,如颜色和缓存区的性质。例如:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
14、/窗口显示单缓存和RGB(彩色)模式,其次,调用void auxInitPosition(Glint x,Glint y,Glint width,Glint height)定义窗口在屏幕上的位置和大小。其中,x,y为窗口左上角的坐标,width,height 分别为窗口的宽和高(像素个数)。默认值为(0,0,100,100)。例如:auxInitPosition(0,0,200,200);/大小 x=200 y=200(0,0)是屏幕左上点最后,完成上述两个函数调用后,用函数void auxInitWindow(Glbyte*titleString)打开窗口。窗口的标题为字符串titleStr
15、ing。窗口把ESC键与退出函数联系起来,可以用来关闭窗口,退出程序。例如:auxInitWindow(“openglsample.c”);/初始化窗口,参数是标题,处理输入事件:当改变窗口尺寸、移动窗口、重新显示窗口时,由auxReshapeFunc(myReshape)调用函数myReshape重新定义窗口属性。通常myReshape函数调用glViewPort函数,对当前图形进行裁剪,重新定义投影矩阵等。OpenGL辅助函数库中还包括处理键盘和鼠标输入事件的函数。,(2)初始化操作由于OpenGL的绘图方式是由一系列的状态确定的,因而在绘制图形前需要做一些准备工作,包括清缓存区(buff
16、er)、定义光照模型、定义纹理映射等基本操作的初始化状态、设置三维视景体、定义视口。例如:glClearColor(0.0,0.0,0.0,0.0);/将窗口清为黑色glClear(GL_COLOR_BUFFER_BIT);/将颜色缓存清为glClearColor命令所设置的颜色,即背景色,(3)设置观察坐标系下的取景模式和取景框位置及大小主要利用了三个函数:函数void glViewport(GLint x,Glint y,Glsizei width,Glsizei height):设置在屏幕上的视口大小,四个参数描述屏幕视口四个角上的坐标(以像素表示)。参数(x,y)用于指定视口的左下角在
17、窗口坐标系中的位置,参数width和height分别确定矩形视口的宽和高,均以像素为单位。注意:视口的大小和尺寸是在窗口坐标系中进行度量的,默认状态下其坐标原点位于窗口的左下角,其尺寸与窗口的大小相同。,函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体。,函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体,在这个体积内的物体投影到锥的顶点。,它通过指定x-z平面内的视角大小及宽高比来确定沿
18、视线方向的棱锥,并通过指定远、近剪切面与视点间的距离来截断棱锥,得到观察体。,注:在默认状态下投影方式为平行正交投影。,(4)使用OpenGL的库函数构造几何物体对象的数学描述。包括点线面的位置和拓扑关系、几何变换、光照处理等。这是OpenGL程序的主要部分。在例10.1中,在函数void CALLBACK display(void)中写好要绘制的三维图形,然后,在主程序中调用auxMainLoop(display)就可让该图形一直显示。,(5)程序的微机运行环境配置 软件与硬件环境 操作系统:Windows 95/98,Windows NT 软件开发环境:Microsoft Visual C
19、+4.0及以上版本 硬件:奔腾级微机,最好配有支持OpenGL硬加速的图形卡 连接三个静态库 程序中除了包含必需的头文件如 外,在创建执行文件时,在VC环境设置中要连接opengl32.lib,glu32.lib和glaux.lib 三个函数库。运行已创建的执行文件时,在windowssystem目录下要有opengl32.dll,glu32.dll两个动态连接库。,10.3 OpenGL程序设计入门,OpenGL的状态机制OpenGL中的图元绘制坐标变换及其OpenGL实现应用变换的一个实例光照处理,10.3.1 OpenGL的状态机制OpenGL的绘图方式是由一系列的状态决定的,如果设置了
20、一种状态或模式而不改变它,OpenGL在绘图过程中将一直保持这种状态或模式。例如,当前绘图颜色就是OpenGL 的一个状态,当选定颜色后,OpenGL就用这个颜色绘图。在例10.1中,以下语句void myinit(void)glClearColor(0.0,0.0,0.0,0.0);中的函数glClearColor(0.0,0.0,0.0,0.0)将视口背景色清为黑色,如果不改变这种状态,视口背景色将一直保持为黑色。,再如:glColor3f(1.0,0.0,0.0);/设置当前颜色为红色glColor3f(0.0,0.0,1.0);/设置当前颜色为蓝色glRectf(0.5,0.5,0.7
21、,0.7);/绘制一个矩形glColor3f(0.0,1.0,0.0);/设置当前颜色为绿色glRectf(0.8,0.8,0.9,0.9);glRectf(0.2,0.2,0.4,0.4);执行结果是:一个蓝色的矩形和两个绿色的矩形。,10.3.2 OpenGL中的图元绘制,任何复杂的图形都是由基本的图元点、线和多边形组成的。程序格式如下:要绘制某个几何对象,首先必须指明究竟是哪种类型的几何对象(例如点、线和多边形),否则系统在执行绘图操作时无法判断究竟是画什么。OpenGL提供了一对用于指定顶点序列操作的函数,确定基本几何对象的类型。glBegin();/描述一组顶点,用于建构某种几何对象
22、glEnd();,1.点的绘制 OpenGL中点定义为一个方块,在默认状态下,点是屏幕上的一个像素。在OpenGL中,一个点是当作一个 n(2,3,4)维向量来处理的。OpenGL 中的点是三维的,如果用户设定二维坐标(x,y),则OpenGL在实际计算时处理的点为(x,y,0);对于由四维齐次坐标定义的顶点(x,y,z,w),在w非零时,齐次顶点(x,y,z,w)对应于三维坐标中的点(x/w,y/w,z/w);若w=0.0,则对应于无穷远处的点。glVertex 2,3,4dfisv(TYPE coords);,例如:glVertex2i(0,1);glVertex3d(-1.0,1.0,3
23、.1425926);glVertex4d(40,-15.9,0,2);Glfloat v3=-1.2f,3.4f,5.6f;glVertex3fv(v);以下操作的结果是在屏幕上绘制三个点:glBegin(GL_POINTS)glVertex3f(1.0,0.0,0.0);glVertex3f(1.0,1.0,0.0);glVertex3f(0.0,1.0,1.0);glEnd();,2.线的绘制与数学意义上两端无限延伸的直线不同,OpenGL的线是数学定义中的线段,用成对的端点来描述。如:glBegin(GL_LINES)glVertex2f(0.0,0.0);glVertex2f(1.0,
24、1.0);glEnd();上述操作描述了一条由坐标原点到点(1.0,1.0)的线段。,3.多边形的绘制多边形指封闭线段围成的区域。但OpenGL中可以描述的多边形有两点限制:多边形的边除了多边形的顶点外不允许相交,即确保多边形为简单多边形;多边形为凸多边形,即任给多边形的两个内部点,其连线完全在多边形内。多边形的描述方式如下:glBegin(GL_POLYGON);glVertex*(v0);glVertex*(v1);.glVertex*(vn);glEnd();其中,*表示glVertex函数的上述任一种组合形式,由多边形顶点v0,v1,vn的表示形式而定。注意:多边形顶点应按一定顺序排列
25、(如逆时针)。,4.矩形的绘制由于矩形在几何体构造中出现得比较频繁,所以OpenGL提供了专门的矩形函数:void glRectdfis(TYPE x1,TYPE y1,TYPE x2,TYPE y2);void glRectdfisv(TYPE*v1,TYPE*v2);矩阵的左上、右下角点坐标分别为(x1,y1)和(x2,y2),或者用数组指针v1、v2表示。用上述函数描述的矩形位于z=0平面内,并且各边分别平行于x、y轴。但注意:经过坐标变换之后,这些特性可能改变。,例10.2 基本的图元绘制程序 为简单起见,我们仅改变例10.1中的绘制函数void CALLBACK display(vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 技术 教学 ppt 课件
链接地址:https://www.31ppt.com/p-4031734.html