图形学试验参考指导书_第1页
图形学试验参考指导书_第2页
图形学试验参考指导书_第3页
图形学试验参考指导书_第4页
图形学试验参考指导书_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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,GLbitfieldunsignedlongOpenGL中定义符号常量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方向上两个侧面夹角度数,0<fovy<180。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之间最少包含四个顶点,假如有n个顶点,生成(n-1)个四边形组成带。GL_POLYGON:要求在glBegin和glEnd之间最少包含三个顶点,对于n个顶点,一次相连组成一个多边形。试验一试验目标:熟悉VC++控制台编程环境,掌握基于C语言OpenGL编程结构。试验内容:GLUT工具包安装;基于VC++控制台C语言编程;VC++控制台编程环境和OpenGL连接;基于VC++控制台OpenGL编程;试验过程:阅读以下程序,掌握基于C语言OpenGL编程结构:1.源程序#include<windows.h>#include<gl/glut.h>voiddisplay(void){glClearColor(0.0f,0.0f,1.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glFlush();}voidmain(int&argc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutCreateWindow("hello");glutDisplayFunc(display);displayMainLoop();}程序内容了解(1)两个包含文件#include<windows.h>包含了windows环境下编程所需要信息。#include<gl/glut.h>包含了OpenGL编程所需要信息。main函数glutInit(&argc,argv);初始化GLUT库,使系统识别GLUT库中命令。glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);告诉GLUT库在创建窗口时使用显示模式和颜色模型,其中参数GLUT_SINGLE指定单缓冲显示模式,绘图命令在用于显示窗口实施。参数GLUT_RGB指定RGBA颜色模型。单缓冲显示模式不能做动画,第一个参数另一个选择是GLUT_DOUBLE,指定双缓冲显示模式,能够作动画。第二个参数其它选择现在不常见,RGBA颜色模型经过设置红、绿,、三种颜色成份来确定颜色。glutCreateWindow("hello");创建应用程序窗口,参数指定窗口标题。glutDisplayFunc(display);经过调用用户程序绘制图形。displayMainLoop();只能放在main函数最终,全部已经创建窗口将在此时显示,对创建窗口绘制开始生效,事件处理开始开启。display函数glClearColor(0.0f,0.0f,1.0f,1.0f);设置颜色缓冲区颜色为蓝色,即设置背景色,参数(0.0f,0.0f,1.0f,1.0f)指定颜色中红、绿、蓝成份,每个成份在0~1(伙伴0~255)之间取值;最终一个参数指定是否透明,0表示透明,1表示不透明。glClear(GL_COLOR_BUFFER_BIT);用glClearColor命令指定颜色清除颜色缓冲区中原来颜色,参数GL_COLOR_BUFFER_BIT代表颜色缓冲区。glFlush();用于刷新OpenGL中命令队列,使全部未被实施OpenGL命令得到实施。因为OpenGL内部使用渲染(绘图)流水线次序处理命令,OpenGL命令常常会排队并成批处理,方便优化性能。glFlush函数告诉OpenGL应该处理到现在为止收到命令。命令glFinish();除了含有glFlush()功效外,还等候图形硬件和网络响应,不过性能没有glFlush()高。运行程序安装GLUT工具包(只需一次):先下载,解压。解压后包含三个文件:glut.h,glut32.lib,glut32.dll。安装过程:*将glut32.dll复制到Windows系统system32文件夹中;*将glut32.lib复制到VClib文件夹中;*将glut.h复制到VCinclude\GL文件夹中。(2)开启VC++,创建基于控制台程序框架*开启VC++(3)设置OpenGL编程环境*在应用程序窗口,选择“Project”→“Settings”→“Link”*在“Object/LibraryModules”一栏中加入:opengl32.Lib、glu32.Lib、glut32.Lib,两个文件名和和原有内容之间用空格间隔。(4)运行程序*输入代码;*编译和连接:在应用程序窗口,选择“Build”→“Compile”或“Build”。*运行:在应用程序窗口,选择“Build”→“Execute”或工具栏按钮“!”实施程序。编译、修改*窗口最下方显示编译和连接信息,假如编译犯错,双击错误信息,系统自动定位到程序中犯错语句,修改后再次编译。程序运行结果:该程序仅创建一个系统默认应用程序窗口。保留在应用程序窗口,选择“saveProject”6修改display函数中glClearColor命令中参数,观察应用程序窗口颜色改变。清除程序(内存)在应用程序窗口,选择“ClearProject”阅读以下程序,掌握应用程序窗口参数设置和渲染对象颜色设置(前景色)1.源程序#include<windows.h>#include<gl/glut.h>voidinit(){glClearColor(0.0,0.0,1.0,1.0);}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);giColor4f(0.0,1.0,1.0,1.0);glRotatef(60,1.0,1.0,1.0);glutWireCube(0.8);glFlush();}voidmain(int&argc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutIniWindowSize(200,200);glutIniWindowPosition(100,100);glutCreateWindow("cube");init();glutDisplayFunc(display);displayMainLoop();}2.程序内容了解(1)main函数glutIniWindowSize(200,200);设置应用程序窗口大小,参数表示宽和高。glutIniWindowPosition(100,100);设置应用程序窗口位置,参数表示窗口左上角坐标。init函数init函数设置应用程序初始化,其中包含应用程序开启时实施代码,而且往往只实施一遍。因为颜色缓冲区颜色设置不常常改变,所以将其放入init函数中。从main函数中调用次序能够看出,和程序一中代码写法没有本质区分。display函数giColor4f(0.0,1.0,1.0,1.0);设置渲染对象颜色,其中参数(0.0,1.0,1.0,1.0)含义和解释和glClearColor(0.0f,0.0f,1.0f,1.0f);相同。glRotatef(60,1.0,1.0,1.0);将绘制图象旋转60度。参数(60,1.0,1.0,1.0)表示(旋转角度,x轴,y轴,z轴)。其中,对应x轴、y轴、z轴数值,假如为1表示饶该轴旋转,为0表示不饶该轴旋转。glutWireCube(0.8);绘制一个边长为0.8线框(Wire)立方体(Cube)。运行、保留和清除程序同程序一。观察并分析程序运行结果。修改程序修改立方体颜色;修改立方体旋转角度;修改应用程序窗口大小和在屏幕显示位置。glutWireCube(GLdoublesize);绘制GLUT中三维物体GLUT中三维物体:命令中“Solid”表示实心物体,“Wire”图形。下面仅给出函数原型,命令使用利用C语言知识调用。(1)立方体函数原型:glutWireCube(GLdoublesize);glutSolidCube(GLdoublesize);功效:绘制一个边长为siaze立方体,立方体中心在原点。参数说明:size为立方体边长。(2)圆锥体数原型:glutWireCone(GLdoublebase,GLdoubleheight,GLintslices,GLintstacks);glutSolidCone(GLdoublebase,GLdoubleheight,GLintslices,GLintstacks);功效:绘制一个圆锥体,圆锥底面中心在坐标原点(0,0,0),圆锥顶点在z轴上。参数说明:base圆锥底面半径,height圆锥高。slices围绕z轴剖面数,stacks沿着z轴剖面数。(3)正十二面体函数原型:glutWireDodecahedron(void);glutSolidDodecahedron(void);功效:绘制一个正十二面体,中心在原点,半径为。参数说明:没有参数。(4)正二十面体函数原型:glutWireIcosahedron(void);glutSolidIcosahedron(void);功效:绘制一个正二十面体,中心在原点,半径为1。参数说明:没有参数。(5)函数原型:glutWireOctahedron(void);glutSolidOctahedron(void);功效:绘制一个正八面体,中心在原点,半径为1。参数说明:没有参数。(6)函数原型:glutWireSphere(GLdoubleradius,GLintslices,GLintstacks);glutSolidSphere(GLdoubleradius,GLintslices,GLintstacks);功效:绘制一个球体,球体中心在原点,半径为radius。参数说明:Radius球体半径,slices围绕z轴剖面数,即球体经线数目,stacks沿着z轴剖面数,即球体纬线数目。(7)函数原型:glutWireTetrahedron(void);glutSolidetrahedron(void);功效:绘制一个正四面体,中心在原点,半径为。参数说明:没有参数。(8)函数原型:glutWireTorus(GLdoubleinnerRadius,GLdoubleouterRadius,GLintslices,GLintstacks);glutSolidTorus(GLdoubleinnerRadius,GLdoubleouterRadius,GLintslices,GLintstacks);功效:绘制一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论