您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 图形学实验指导书2009
OpenGL简介一、OpenGL概述OpenGL是图形硬件的一个软件接口(GL代表图形库,GraphicsLibrary)。使用OpenGL,可以对计算机图形技术进行控制,产生逼真的现实世界的图象或虚拟的现实世界所没有的图象。OpenGL包括了大约250个不同的函数,程序员可以用这些函数指定物体和操作,创建交互性三维应用程序,而不必为许多应用程序中通用的标准函数编写代码,同时使应用程序避免接触过多的硬件细节。OpenGL主要关注图象的渲染,即根据几何图形对象的规范及其属性,使用虚拟的照相机和光源来构成一幅图象。OpenGL是跨平台的一种应用程序接口(ApplicationProgrammer'sInterface,API),因此不包含输入和视窗操作。对于视窗管理,我们选用OpenGL应用工具包GLUT(OpenGLUtilityToollkit)。二、OpenGL的组成在微机版本中,OpenGL主要由三个函数库组成,它们是核心库、实用函数库和编程辅助库。OpenGL的核心库包含了OpenGL最基本的命令函数。在这个库中,提供了一百多个函数,这些函数的函数名都以“gl”为前缀。这些函数用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等几乎所有的二维和三维图形操作。这一百多个基本函数由于使用各自不同的参数而导致格式的变形,派生出数百个命令。而且,对于不同的硬件和软件平台,这些函数的使用是完全相同的,这个特性决定了OpenGL的可移植性。OpenGL的核心库提供了创建基本几何图元的函数,通过基本几何图元的各种组合创建其它几何模型,几何模型也可称为物体。为了减少编程负担,OpenGL实用函数库提供了40多个创建常用的几何对象函数,立方体、二次曲面等。OpenGL实用库中函数的函数名以“glu”为前缀,所有函数都是利用核心库中函数编写,使用方法和核心库中函数的使用方法相同。由于OpenGL是一个图形标准,独立于任何操作系统和窗口系统,OpenGL中没有提供窗口管理和消息事件响应的函数,也没有从鼠标和键盘读取事件的功能。因此,在不同的操作系统都设计OpenGL了额外的编程辅助库提供一些基本的窗口管理函数、事件处理函数,例如定义窗口的大小、处理键盘和鼠标事件等。Windows操作系统下的编程辅助库中函数的函数名以“aux”为前缀。这些编程辅助库是依赖于具体操作系统的,为了支持跨平台,SGI公司的MarkKilgard编写了GLUT,GLUT中函数的函数名以“glut”为前缀。现在,在Windows操作系统GLUT已经取代了AUX库。三、OpenGL的功能1、根据几何图元创建形状,建立物体的几何模型。OpenGL中包括两种图元:几何图元和图象图元。几何图元包括:点、直线段、三角形、四边形和多边形,这些图元通过顶点指定。图象图元,例如位图。2、在三维空间中排列物体,并选择观察复合场景的有利视角;3、计算所有物体的颜色。颜色可以由应用程序明确指定,也可以根据特定的光照条件来确定,或通过把纹理表面贴到物体表面得到。4、把物体的数学描述以及和它们相关的颜色信息转换为屏幕上的像素。四、基于C语言和OpenGL的图形程序开发基础1、基于C语言和OpenGL的图形程序结构:根据需要在C语言程序中嵌入OpenGL命令。2、程序中一般包括以下三个部分:(1)应用程序初始化;(2)生成并绘制图象;(3)main函数中调用(1)和(2)中的函数。3、OpenGL命令格式和数据类型OpenGL命令就是OpenGL中的函数调用,命令名称就是函数名,命令中的参数就是函数调用所需的参数。OpenGL函数命名约定:函数名饿头几个字母说蜜柑内该函数来自哪个库,后面部分包含一个根命令,一般是一个英文单词(第一个字母必须大写),表示该函数的功能,后缀中的数字和字母分别表示参数的个数和类型。例如:命令glColor3f(1.0,1.0,1.0);前缀“gl”表示该函数属于核心库,“Color”表示该命令的功能为着色,“3f”表示该命令有三个参数,参数类型为浮点数,(1.0,1.0,1.0)是函数调用时的具体参数,最后的分号“;”是C语言格式中所要求的。如果OpenGL命令的后缀有一个字母“v”,表示该命令有一个指向矢量或数组的指针参数,例如:GLfloatcolor[]={1.0,1.0,1.0};//说明一个浮点型的数组color,GLfloat是数据类型glColor3fv(color);//数组color作为参数OpenGL命令中的参数个数可能使个、3个或4个,参数类型见下表:OpenGL命令后缀及对应的数据类型OpenGL命令中后缀表示的数据类型对应的OpenGL类型对应的C语言类型b8位整数GLbyteSignedchars16位整数GLshortshorti32位整数GLint,GLsizeilongf32位浮点数GLfloat,GLclampffloatd64位浮点数GLdouble,GLclampddoubleub8位无符号整数GLubyte,GLbooleanunsignedcharus16位无符号整数GLshortunsignedshortui32位无符号整数GLuint,GLenum,GLbitfieldunsignedlong4、OpenGL中定义的符号常量OpenGL中的符号常量,以大写字母GL_或GL_开头,表示属于哪个库,所有字母都大写,单词之间用下划线连接。例如,GL_COLOR_BUFFER_BIT,表示颜色缓冲区。5、头文件gl.h、glu.h和glut.hOpenGL核心库的函数、类型和宏(符号常量)的原型包括在头文件gl.h中,实用函数库的原型包括在头文件glu.h中,应用工具包GLUT的原形4包括在头文件glut.h中。OpenGL是一个标准的程序库,Windows系统运行OpenGL程序,需要在windows\system32文件夹包含动态连接库opengl32.dll和glu32.dll,使用GLUT的用户还需要包含动态连接库glut32.dll。编译OpenGL程序需要有头文件gl.h和glu.h,使用GLUT的用户需要头文件glut.h,因为glut.h包括了gl.h和glu.h,所以仅用glut.h即可;还需要库文件opengl32.lib、glu32.lib和glut32.lib。五.OpenGl命令命令:glClearColor函数原型:voidglClearColor(GLclampfred,GLclampfgreen,GLclampfblue,GLclampfalph);功能:将缓存的当前清楚颜色设置为给定的颜色值(red,green,blue,alpha);参数:(red,green,blue)指定RGB颜色空间的一个颜色值,alpha指定透明度。命令:glClear函数原型:voidglClear(GLbitfieldmask);功能:用当前的清楚值清楚1种或多种缓冲区。参数:mask指定需要清除的缓冲区。缓冲区对应的mask值见表1.1。如果需要同时清除多种缓冲区,则将表中的多个值通过逻辑或(|)组合在一起表示msk值。例如:同时清除颜色缓冲区和深度缓冲区。mask=GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT。命令:glColor3f函数原型:voidglColor3f(GLfloatred,GLfloatgreen,GLfloatblue);功能:将当前的颜色值设置为指定的RGBA模式颜色值(red,green,blue,1.0f),其中1.0f为默认的混合因子数值。参数:(red,green,blue),指定颜色值的R、G、B三个分量每个分量的取值范围均为区间[0.0,1.0]。命令:SwapBuffers函数原型:BoolSwapBuffers(HDChdc);功能:交换缓冲区,将绘制完成的缓存图像显示在屏幕上。要求采用双缓存机制。参数:hdc指定设备上下文。返回值:如果函数执行成功,返回TRUE,否则,返回FALSE。命令:glOrtho函数原型:voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublezNear,GLdoublezFar);功能:产生正平行投影变换矩阵。参数:left、right分别为裁剪矩形体的左、右侧两个裁剪平面的X轴坐标值。bottom、top分别为裁剪矩形体的底、顶端两个裁剪平面的Y轴坐标值。(-zNear)、(-zFar)分别为裁剪矩形体的近、远端两个裁剪平面的Z轴坐标值。命令:glFrustum函数原型:voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdoublezNear,GLdoublezFar);功能:产生透视投影变换矩阵。参数:left、right分别为裁剪四棱台上底面矩形的左、右侧两条边的X轴坐标值。bottom、top分别为裁剪四棱台上底面矩形底、顶端两条边的Y轴坐标值。(-zNear)、(-zFar)分别为裁剪矩形体的近、远端两个裁剪平面的Z轴坐标值。命令:gluPerspective函数原型:voidgluPerspective(GLdoublefovy,GLdoubleaspect,GLdoublezNear,GLdoublezFar);功能:产生对称透视投影变换矩阵。参数:fovy裁剪四棱台在Y方向上的两个侧面夹角的度数,0fovy180。aspect裁剪四棱台上底面命令:glViewport函数原型:voidglViewport(GLintx0,GLinty0,GLsizeiwidth,GLsizeiheight);功能:产生视口变换,将在三维空间中可以显示在屏幕上的点映射到视口中。参数:x0,y0视口左下角点在视图窗口坐标下的坐标值;width视口的宽度;height视口的高度。命令:glVertex3d函数原型:voidglVertex3d(GLdoublex,GLdoubley,GLdoublez);功能:用在一对函数glBegin和glEnd之间,用来指定一个顶点的坐标值。参数:x,y,z顶点坐标的三个分量。命令:glBegin和glEnd函数原型:voidglBegin(GLenummode);voidglEnd(void);功能:函数glBegin和glEnd共同组成一个函数对。在函数glBegin和glEnd之间的语句定义了一个或一组图形元素的顶点坐标、颜色和法向量等信息。同时函数glBegin的参数mode指定图形元素的类型。参数:mode指定图形元素的类型。参数mode所有可能取值及其含义如下:GL_POINTS:要求在glBegin和glEnd之间至少包含一个顶点,每个顶点都是孤立的点。GL_LINES:要求在glBegin和glEnd之间至少包含两个顶点,如果有2n个顶点,生成n条直线段。GL_LINE_LOOP:要求在glBegin和glEnd之间至少包含两个顶点,依次相连生成一个封闭的环。GL_LINE_STRIP:要求在glBegin和glEnd之间至少包含两个顶点,依次相连生成一条折线段。GL_TRIANGLES:要求在glBegin和glEnd之间至少包含三个顶点,如果有3n个顶点,生成n个三角形。GL_TRIANGLE_STRIP:要求在glBegin和glEnd之间至少包含三个顶点,如果有n个顶点,生成(n-2)个三角形组成的带。GL_TRIANGLE_FAN:要求在glBegin和glEnd之间至少包含三个顶点,如果有n个顶点,生成(n-2)个三角形组成的扇。GL_QUADS:要求在glBegin和glEnd之间至少包含四个顶点,如果有4n个顶点,生成n个四边形。GL_QUAD_STRIP:要求在glBegin和glEnd之间至少包含四个顶点,如果有
本文标题:图形学实验指导书2009
链接地址:https://www.777doc.com/doc-2598394 .html