精品openGL讲义.ppt
《精品openGL讲义.ppt》由会员分享,可在线阅读,更多相关《精品openGL讲义.ppt(71页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一、一、OpenGL简介简介什么是什么是OpenGLOpenGL的组成的组成一个简单的绘图程序一个简单的绘图程序OpenGL函数命名规范函数命名规范NT环境中环境中OpenGL的命令解释流程的命令解释流程1什么是什么是OpenGL是一个功能强大的图形库,用户可以很方便地是一个功能强大的图形库,用户可以很方便地开发所需要地有多种特殊视觉(如光照,纹理,开发所需要地有多种特殊视觉(如光照,纹理,透明,阴影)的三维图形。透明,阴影)的三维图形。与软硬件平台无关的三维图形软件包,可运行与软硬件平台无关的三维图形软件包,可运行于多种窗口系统之上于多种窗口系统之上包含图元生成、投影、光照、光栅化等图形显包
2、含图元生成、投影、光照、光栅化等图形显示过程所需的功能示过程所需的功能2发展历史发展历史前身是由前身是由SGI公司为其图形工作站开发的公司为其图形工作站开发的IRISGL,是,是一个工业标准的三维图形软件接口。一个工业标准的三维图形软件接口。向其他平台移植时,开发了向其他平台移植时,开发了OpenGL,有有GL的功能,而且是开放的,使用于多种硬件平台及的功能,而且是开放的,使用于多种硬件平台及操作系统,操作系统,用户可以创建出接近光线跟踪的高质量静止或动画的用户可以创建出接近光线跟踪的高质量静止或动画的三维彩色图象,而且是要比光线跟踪算法快一个数量三维彩色图象,而且是要比光线跟踪算法快一个数量
3、级。级。3OpenGL的组成的组成OpenGL库库包括包括115个基本函数个基本函数函数以函数以gl开头开头例:例:glColor3f(),glTranslate3f().完成图元的定义、几何变换、投影等功能完成图元的定义、几何变换、投影等功能4OpenGL的组成的组成OpenGL实用库实用库实用函数实用函数43个个函数以函数以glu开头开头例:例:gluPerspective();完成更高层的图形处理如曲线曲面的生成、完成更高层的图形处理如曲线曲面的生成、图象操作等图象操作等OpenGL辅助库辅助库包括函数包括函数31个个函数以函数以aux开头开头例:例:auxInitWindow();主要
4、用于窗口管理主要用于窗口管理5主要特点主要特点OpenGL可以在网络上工作,即客户机可以在网络上工作,即客户机/服务器型,显服务器型,显示图形的计算机(客户机)可以不是运行图形程序的示图形的计算机(客户机)可以不是运行图形程序的计算机(服务器),客户机与服务器可以是不同类型计算机(服务器),客户机与服务器可以是不同类型的计算机,只要两者服从相同的协议。的计算机,只要两者服从相同的协议。OpenGL是与硬件无关的软件接口,可以在多种硬件平是与硬件无关的软件接口,可以在多种硬件平台上运行台上运行,使得使得OpenGL的应用程序有较好的移植性。的应用程序有较好的移植性。6OpenGL的工作顺序的工作
5、顺序构造几何要素(点,线,多边形,图象,位图),创构造几何要素(点,线,多边形,图象,位图),创建对象的数学描述。建对象的数学描述。在三维空间上放置对象,选择有利的场景观察点。在三维空间上放置对象,选择有利的场景观察点。计算对象的颜色,这些颜色可能直接定义,或由光照计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。条件及纹理间接给出。光栅化,把对象的数学描述和颜色信息转换到屏幕的光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。另外,也可能执行消隐,以及对象素的操作。象素。另外,也可能执行消隐,以及对象素的操作。7OpenGL程序的基本结构程序的基本结构第一部分是初始化部分:
6、第一部分是初始化部分:主要是设置一些主要是设置一些OpenGL的状态开关,如颜色模式的状态开关,如颜色模式(RGBA或或ALPHA)的选择,是否作光照处理(若有)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数这些状态一般都用函数glEnable(?),glDisable(?)来设置,来设置,?表示特定的状态。表示特定的状态。8第二部分设置观察坐标系下的取景模式和取景框大小。第二部分设置观察坐标系下的取景模式和取景框大小。主要用到三个函数:主要用到三个函数:voidglViewport(left,t
7、op,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);个角上的坐标(以象素表示);voidglOrtho(left,right,bottom,top,near,far);设置投影方式为正交投影(平行投影),其取景体积设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体是一个各面均为矩形的六面体;voidgluPerspective(fovy,aspect,zNear,zFar);设置投影方式为透视投影,其取景体积是一个截头锥设置投影方式为透视投影,其取景体积是一个截头锥体,在
8、这个体积内的物体投影到锥的顶点。体,在这个体积内的物体投影到锥的顶点。9第三部分是第三部分是OpenGL的主要部分,使用的主要部分,使用OpenGL的库函数构造几何物体对象的数学描的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。光照处理等等。注:移植到使用注:移植到使用MFC框架下的框架下的Windows程序中,程序中,由于由于Windows自身有一套显示方式,需要进行自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。一些必要的改动以协调这两种不同显示方式。10绘图前的一些准备工作绘图前的一些准
9、备工作清除当前窗口的内容,以免影响绘图的效果清除当前窗口的内容,以免影响绘图的效果voidglClearColor(red,green,blue,alpha);给定当前屏幕的背景设置颜色,给定当前屏幕的背景设置颜色,red,green,blue,alpha为为RGBA颜色值颜色值.11voidglClear(mask);命令标志要清除的缓冲区。可以清除的缓冲区如下表命令标志要清除的缓冲区。可以清除的缓冲区如下表所示:所示:缓冲区名称颜色缓冲区GL_COLOR_BUFFER_BIT深度缓冲区GL_DEPTH_BUFFER_BIT累加缓冲区GL_ACCUM_BUFFER_BIT模板缓冲区GL_ST
10、ENCIL_BUFFER_BIT12可以用可以用glClearColor,glClearDepth,glClearIndex,glClearStencil,glClearAcc函数为各自对应的缓函数为各自对应的缓冲区赋值。若要同时清除多个缓冲区,使用上冲区赋值。若要同时清除多个缓冲区,使用上表中所列的表中所列的mask位或组合,在速度上要比使用位或组合,在速度上要比使用多次调用多次调用glClear函数要快得多函数要快得多。13描述几何要素描述几何要素按一定的顺序给出几何要素的顶点,按一定的顺序给出几何要素的顶点,glVertex命命令指定一个顶点,并在生成顶点后,把当前颜令指定一个顶点,并在
11、生成顶点后,把当前颜色,纹理坐标,法线等值赋给这个顶点。色,纹理坐标,法线等值赋给这个顶点。函数函数voidglVertex234sifdv(coords);有时用矢量形式定义顶点,执行效率高,但是有时用矢量形式定义顶点,执行效率高,但是它只能在它只能在glBegin与与glEnd之间调用才有意义。之间调用才有意义。14glBegin标志几何要素定义的开始,标志几何要素定义的开始,glEnd函数函数则标志结束一个几何要素的定义。则标志结束一个几何要素的定义。函数函数voidglBegin(Glenummode);mode的值见下表。的值见下表。15Mode的值解释GL_POINTS一系列独立的
12、点GL_LINES每两点相连成为线段GL_POLYGON简单,凸多边形的边界GL_TRIANGLES三点相连成为一个三角形GL_QUADS四点相连成为一个四边形GL_LINE_STRIP顶点相连成为一系列线段GL_LINE_LOOP顶点相连成为一系列线段,连接最后一点与第一点GL_TRIANGLE_STRIP相连的三角形带GL_TRIANGLE_FAN相连的三角形扇形GL_QUAD_STRIP相连的四边形带16一个简单的绘图程序一个简单的绘图程序例程例程#include#include#include#includevoidmain(void)OpenAWindow();/创建一个窗口创建一个
13、窗口InitOpenGL();/初始化初始化OpenGLglColor3f(1.0,1.0,1.0);/设置当前颜色设置当前颜色glBegin(GL_POLYGON);/开始绘图开始绘图glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();/强制输出强制输出KeepTheWindowOnScreenForAWhile();/使窗口在屏幕上保留一会使窗口在屏幕上保留一会17OpenGL函数命名规范函数命名规范voidglVertex3fv(Glfl
14、oat*vertex);前缀前缀后缀后缀前缀前缀gl,glu,aux-该函数属于哪个函数库该函数属于哪个函数库后缀后缀2,3,4-参数的维数参数的维数b,s,l,f,d,ub,us,ui-参数的数据类型参数的数据类型v-以数组方式传递参数以数组方式传递参数函数名中的单词首写字母大写函数名中的单词首写字母大写18NT环境中环境中OpenGL的命令解释流程的命令解释流程OpenGL命令OpenGLDLL客户服务器OpenGLICD加速卡DDIWin32DDIServerDLL视频驱动应用程序不带加速卡 带加速卡应用程序OpenGL命令OpenGLDLL客户服务器ServerDLLWin32DDI视
15、频驱动19NT环境中环境中OpenGL的命令解释流程的命令解释流程ICDICD是是可可安安装装的的客客户户驱驱动动(Installable Installable Client DriverClient Driver)DLLDLL是是 动动 态态 联联 接接 库库(Dynamic Dynamic Link Link LibraryLibrary)DDIDDI是设备驱动接口(是设备驱动接口(Device Driver Device Driver InterfaceInterface)20二、二、OpenGL图元图元创建第一个应用程序创建第一个应用程序图元的绘制图元的绘制图元的属性图元的属性21创
16、建第一个应用程序创建第一个应用程序(1/8)(1/8)初始化显示方式初始化显示方式例:例:将显示方式置为单缓存、直接颜色方式将显示方式置为单缓存、直接颜色方式voidauxInitDisplayMode(GL_SINGLE|AUX_RGBA);voidauxInitDisplayMode(Glbitfieldmask);mask:GL_DOUBLE(GL_SINGLE)|AUX_RGBA(AUX_INDEX)|AUX_DEPTH|AUX_STENCIL|AUX_ACCUM22创建第一个应用程序创建第一个应用程序(2/8)(2/8)创建窗口创建窗口初始化窗口的位置与大小初始化窗口的位置与大小创建
17、并显示窗口创建并显示窗口voidauxInitPosition(Glintx,GLinty,GLsizeiwidth,GLsizeiheight);(x,y):窗口的原点:窗口的原点width,height:窗口的宽和高:窗口的宽和高voidauxInitWindow(GLbyte*title);title:窗口标题:窗口标题23创建第一个应用程序创建第一个应用程序(3/8)(3/8)初始化帧缓存(颜色缓存)初始化帧缓存(颜色缓存)指定初始颜色指定初始颜色清帧缓存清帧缓存voidglClearColor(GLclampfr,GLclampfg,GLclampfb,GLclampfa);缺省值:
18、缺省值:(0.0,0.0,0.0,0.0)voidglClear(GL_COLOR_BUFFER_BIT);24创建第一个应用程序创建第一个应用程序(4/8)(4/8)初始化深度缓存初始化深度缓存指定初始深度值指定初始深度值清深度缓存清深度缓存voidglClearDepth(GLclampddepth);缺省值:缺省值:0.0voidglClear(GL_DEPTH_BUFFER_BIT);25创建第一个应用程序创建第一个应用程序(5/8)(5/8)设置投影方式设置投影方式置投影方式为平行投影置投影方式为平行投影置投影方式为透视投影置投影方式为透视投影voidglOrtho(GLdouble
19、left,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);26创建第一个应用程序创建第一个应用程序(6/8)(6/8)指定图元的颜色指定图元的颜色绘图绘图强制输出强制输出voidglColor*();voidglFlush(void);27创建第一个应用程序创建第一个应用程序(7/8)(7/8)例程例程2-1#include
20、#include#include#includevoidKeepTheWindowOnScreenForAWhile()_sleep(2000);voidmain(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,400);auxInitWindow(CreateYourOwnProgram);glClearColor(0.0,0.0,0.0,0.0);glClearDepth(0.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);28创建第一个应用程序
21、创建第一个应用程序(8/8)(8/8)glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);glColor3f(1.0,1.0,1.0);glBegin(GL_POLYGON);glVertex3f(-0.5,-0.5,0.0);glVertex3f(-0.5,0.5,0.0);glVertex3f(0.5,0.5,0.0);glVertex3f(0.5,-0.5,0.0);glEnd();glFlush();KeepTheWindowOnScreenForAWhile();29图元的绘制(图元的绘制(1/21/2)图元的种类图元的种类点、线段、多边形、矩形点、线段、多边形、
22、矩形图元的表示图元的表示点:三维坐标点:三维坐标(x,y,z)齐次坐标齐次坐标(x,y,z,1)线段:两个端点线段:两个端点多边形:顶点序列多边形:顶点序列矩形:左下角点、右上角点矩形:左下角点、右上角点绘制图元绘制图元定义一个顶点定义一个顶点voidglVertex234sifdv(TYPEcoords);例:例:glVertex3f(1.0,1.0,1.0);30图元的绘制(图元的绘制(2/22/2)glBegin()与与glEnd()允许在允许在glBegin()与与glEnd()之间调用的之间调用的OpenGL命令命令voidglBegin(GLenummode);mode:GL_PO
23、INTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIPvoidglEnd(void);glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();glTexCoord();glEdgeFlag();glMaterial();31图元的属性(图元的属性(1/51/5)颜色颜色点点大小(缺省值为大小(缺省值为1)线段线段线宽线宽v
24、oidglColor*();voidglIndex();voidglPointSize(GLfloatsize);voidglLineWidth(GLfloatwidth);32图元的属性(图元的属性(2/52/5)线型:连续线(缺省值)、点画线等线型:连续线(缺省值)、点画线等多边形多边形绘制方式:顶点、边界、填充绘制方式:顶点、边界、填充 voidglEnable(GL_LINE_STIPPLE);voidglLineStipple(GLintfactor,GLushortpattern);例:例:patternfactor结果结果0 x00FF10 x00FF2voidglPolygon
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 openGL 讲义
限制150内