ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:25.50KB ,
资源ID:7880049      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7880049.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图形学实验指导书1.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

图形学实验指导书1.docx

1、图形学实验指导书1OpenGL简介一、OpenGL概述OpenGL是图形硬件的一个软件接口(GL代表图形库,Graphics Library)。使用OpenGL,可以对计算机图形技术进行控制,产生逼真的现实世界的图象或虚拟的现实世界所没有的图象。OpenGL包括了大约250个不同的函数,程序员可以用这些函数指定物体和操作,创建交互性三维应用程序,而不必为许多应用程序中通用的标准函数编写代码,同时使应用程序避免接触过多的硬件细节。OpenGL主要关注图象的渲染,即根据几何图形对象的规范及其属性,使用虚拟的照相机和光源来构成一幅图象。OpenGL是跨平台的一种应用程序接口(Application

2、Programmers Interface, API),因此不包含输入和视窗操作。对于视窗管理,我们选用OpenGL应用工具包GLUT(OpenGL Utility Toollkit)。2、OpenGL的组成在微机版本中,OpenGL主要由三个函数库组成,它们是核心库、实用函数库和编程辅助库。OpenGL的核心库包含了OpenGL最基本的命令函数。在这个库中,提供了一百多个函数,这些函数的函数名都以“gl”为前缀。这些函数用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等几乎所有的二维和三维图形操作。这一百多个基本函数由于使用各自不同的参数而导致格式的变形,派

3、生出数百个命令。而且,对于不同的硬件和软件平台,这些函数的使用是完全相同的,这个特性决定了OpenGL的可移植性。OpenGL的核心库提供了创建基本几何图元的函数,通过基本几何图元的各种组合创建其它几何模型,几何模型也可称为物体。为了减少编程负担,OpenGL实用函数库提供了40多个创建常用的几何对象函数,立方体、二次曲面等。OpenGL实用库中函数的函数名以“glu”为前缀,所有函数都是利用核心库中函数编写,使用方法和核心库中函数的使用方法相同。由于OpenGL是一个图形标准,独立于任何操作系统和窗口系统,OpenGL中没有提供窗口管理和消息事件响应的函数,也没有从鼠标和键盘读取事件的功能。

4、因此,在不同的操作系统都设计OpenGL了额外的编程辅助库 提供一些基本的窗口管理函数、事件处理函数,例如定义窗口的大小、处理键盘和鼠标事件等。Windows操作系统下的编程辅助库中函数的函数名以“aux”为前缀。这些编程辅助库是依赖于具体操作系统的,为了支持跨平台,SGI公司的Mark Kilgard编写了GLUT,GLUT中函数的函数名以“glut”为前缀。现在,在Windows操作系统GLUT已经取代了AUX库。3、OpenGL的功能1、根据几何图元创建形状,建立物体的几何模型。OpenGL中包括两种图元:几何图元和图象图元。几何图元包括:点、直线段、三角形、四边形和多边形,这些图元通过

5、顶点指定。图象图元,例如位图。2、在三维空间中排列物体,并选择观察复合场景的有利视角;3、计算所有物体的颜色。颜色可以由应用程序明确指定,也可以根据特定的光照条件来确定,或通过把纹理表面贴到物体表面得到。4、把物体的数学描述以及和它们相关的颜色信息转换为屏幕上的像素。四、基于C语言和OpenGL的图形程序开发基础1、基于C语言和OpenGL的图形程序结构:根据需要在C语言程序中嵌入OpenGL命令。2、程序中一般包括以下三个部分:(1)应用程序初始化;(2)生成并绘制图象;(3)main函数中调用(1)和(2)中的函数。3、OpenGL命令格式和数据类型OpenGL命令就是OpenGL中的函数

6、调用,命令名称就是函数名,命令中的参数就是函数调用所需的参数。OpenGL函数命名约定:函数名饿头几个字母说蜜柑内该函数来自哪个库,后面部分包含一个根命令,一般是一个英文单词(第一个字母必须大写),表示该函数的功能,后缀中的数字和字母分别表示参数的个数和类型。例如:命令glColor3f(1.0,1.0,1.0);前缀“gl”表示该函数属于核心库,“Color”表示该命令的功能为着色,“3f”表示该命令有三个参数,参数类型为浮点数,(1.0,1.0,1.0)是函数调用时的具体参数,最后的分号“;”是C语言格式中所要求的。如果OpenGL命令的后缀有一个字母“v”,表示该命令有一个指向矢量或数组

7、的指针参数,例如:GLfloat color =1.0,1.0,1.0; /说明一个浮点型的数组color,GLfloat是数据类型glColor3fv(color); /数组color 作为参数OpenGL命令中的参数个数可能使个、3个或4个,参数类型见下表:OpenGL命令后缀及对应的数据类型OpenGL命令中后缀表示的数据类型对应的OpenGL类型对应的C语言类型b8位整数GLbyteSigned chars16位整数GLshortshorti32位整数GLint,GLsizeilongf32位浮点数GLfloat,GLclampffloatd64位浮点数GLdouble,GLclamp

8、ddoubleub8位无符号整数GLubyte,GLboolean unsigned charus16位无符号整数GLshort unsigned shortui32位无符号整数GLuint, GLenum, GLbitfield unsigned long4、OpenGL中定义的符号常量OpenGL中的符号常量,以大写字母GL_或GL_开头,表示属于哪个库,所有字母都大写,单词之间用下划线连接。例如,GL_COLOR_BUFFER_BIT,表示颜色缓冲区。5、头文件gl.h、glu.h和glut.hOpenGL核心库的函数、类型和宏(符号常量)的原型包括在头文件gl.h中,实用函数库的原型包

9、括在头文件glu.h中,应用工具包GLUT的原形4包括在头文件glut.h中。OpenGL是一个标准的程序库,Windows系统运行OpenGL程序,需要在windowssystem32文件夹包含动态连接库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命令命令:glClearCo

10、lor函数原型:void glClearColor(GLclampf red,GLclampf green,GLclampf blue, GLclampf alph);功能:将缓存的当前清楚颜色设置为给定的颜色值(red,green,blue,alpha);参数:(red,green,blue)指定RGB颜色空间的一个颜色值,alpha指定透明度。命令:glClear函数原型:void glClear(GLbitfield mask);功能:用当前的清楚值清楚1种或多种缓冲区。参数:mask指定需要清除的缓冲区。缓冲区对应的mask值见表1.1。如果需要 同时清除多种缓冲区,则将表中的多个值通

11、过逻辑或(|)组合在一起表 示msk值。例如:同时清除颜色缓冲区和深度缓冲区。 mask=GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT。命令:glColor3f函数原型:void glColor3f(GLfloat red,GLfloat green,GLfloat blue);功能:将当前的颜色值设置为指定的RGBA模式颜色值(red,green,blue,1.0f), 其中1.0f为默认的混合因子数值。参数:(red,green,blue),指定颜色值的R、G、B三个分量每个分量的取值范围 均为区间0.0,1.0。命令:SwapBuffers函数原型:Bo

12、ol SwapBuffers(HDC hdc);功能:交换缓冲区,将绘制完成的缓存图像显示在屏幕上。要求采用双缓存机制。参数:hdc指定设备上下文。返回值:如果函数执行成功,返回TRUE,否则,返回FALSE。命令:glOrtho函数原型:void glOrtho(GLdouble left,GLdouble right,GLdouble bottom, GLdouble top,GLdouble zNear,GLdouble zFar);功能:产生正平行投影变换矩阵。参数:left、right分别为裁剪矩形体的左、右侧两个裁剪平面的X轴坐标值。 bottom、top分别为裁剪矩形体的底、顶端

13、两个裁剪平面的Y轴坐标值。 (zNear)、(zFar)分别为裁剪矩形体的近、远端两个裁剪平面的 Z轴坐标值。命令:glFrustum函数原型:void glFrustum(GLdouble left,GLdouble right,GLdouble bottom, GLdouble top,GLdouble zNear,GLdouble zFar);功能:产生透视投影变换矩阵。参数:left、right分别为裁剪四棱台上底面矩形的左、右侧两条边的X轴坐标值。 bottom、top分别为裁剪四棱台上底面矩形底、顶端两条边的Y轴坐标值。 (zNear)、(zFar)分别为裁剪矩形体的近、远端两个裁

14、剪平面的 Z轴坐标值。命令:gluPerspective函数原型:void gluPerspective(GLdouble fovy,GLdouble aspect, GLdouble zNear,GLdouble zFar);功能:产生对称透视投影变换矩阵。参数:fovy裁剪四棱台在Y方向上的两个侧面夹角的度数,0fovy180。 aspect裁剪四棱台上底面命令:glViewport函数原型:void glViewport(GLint x0,GLint y0,GLsizei width,GLsizei height);功能:产生视口变换,将在三维空间中可以显示在屏幕上的点映射到视口中。参数

15、:x0,y0 视口左下角点在视图窗口坐标下的坐标值; width 视口的宽度; height 视口的高度。命令:glVertex3d函数原型:void glVertex3d(GLdouble x,GLdouble y,GLdouble z);功能:用在一对函数glBegin和glEnd之间,用来指定一个顶点的坐标值。参数:x,y,z 顶点坐标的三个分量。命令:glBegin和glEnd函数原型:void glBegin(GLenum mode); void glEnd(void);功能:函数glBegin和glEnd 共同组成一个函数对。在函数glBegin和glEnd之 间的语句定义了一个或

16、一组图形元素的顶点坐标、颜色和法向量等信息。 同时函数glBegin的参数mode 指定图形元素的类型。参数:mode 指定图形元素的类型。参数mode 所有可能取值及其含义如下: GL_POINTS:要求在glBegin和glEnd之间至少包含一个顶点,每个顶点 都是孤立的点。 GL_LINES:要求在glBegin和glEnd之间至少包含两个顶点,如果有2n 个顶点,生成n条直线段。 GL_LINE_LOOP:要求在glBegin和glEnd之间至少包含两个顶点,依次 相连生成一个封闭的环。 GL_LINE_STRIP:要求在glBegin和glEnd之间至少包含两个顶点,依次 相连生成一

17、条折线段。 GL_TRIANGLES:要求在glBegin和glEnd之间至少包含三个顶点,如果 有3n个顶点,生成n个三角形。 GL_TRIANGLE_STRIP:要求在glBegin和glEnd之间至少包含三个顶点, 如果有n个顶点,生成(n2)个三角形组成的带。 GL_TRIANGLE_FAN:要求在glBegin和glEnd之间至少包含三个顶点, 如果有n个顶点,生成(n2)个三角形组成的扇。 GL_QUADS:要求在glBegin和glEnd之间至少包含四个顶点,如果 有4n个顶点,生成n个四边形。 GL_QUAD_STRIP:要求在glBegin和glEnd之间至少包含四个顶点,

18、如果有n个顶点,生成(n1)个四边形组成的带。 GL_POLYGON:要求在glBegin和glEnd之间至少包含三个顶点,对于n 个顶点,一次相连组成一个多边形。实验一实验目的:熟悉VC+控制台编程环境,掌握基于C语言的OpenGL编程结构。实验内容:1.GLUT工具包的安装;2.基于VC+控制台的C语言编程;3.VC+控制台编程环境与OpenGL的连接;4.基于VC+控制台的OpenGL编程;实验过程:1.阅读以下程序,掌握基于C语言的OpenGL编程结构:1.源程序#include #include void display(void) glClearColor(0.0f,0.0f,1.

19、0f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glFlush();void main(int &argc,char *argv) glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutCreateWindow(hello);glutDisplayFunc( display);displayMainLoop();2.程序内容理解(1) 两个包含文件#include 包含了windows环境下编程所需要的信息。#include 包含了OpenGL编程所需要的信息。(2) main函数glu

20、tInit(&argc,argv); 初始化GLUT库,使系统识别GLUT库中的命令。glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 告诉GLUT库在创建窗口时使用的显示模式和颜色模型,其中参数GLUT_SINGLE指定单缓冲显示模式,绘图命令在用于显示的窗口执行。参数GLUT_RGB指定RGBA颜色模型。单缓冲显示模式不能做动画,第一个参数的另一种选择是GLUT_DOUBLE,指定双缓冲显示模式,可以作动画。第二个参数的其它选择现在不常用,RGBA颜色模型通过设置红、绿,、三种颜色的成分来确定颜色。glutCreateWindow(hello); 创建应

21、用程序窗口,参数指定窗口标题。glutDisplayFunc( display); 通过调用用户程序绘制图形。displayMainLoop(); 只能放在main函数的最后,所有已经创建的窗口将在此时显示,对创建窗口的绘制开始生效,事件处理开始启动。(3)display函数glClearColor(0.0f,0.0f,1.0f,1.0f); 设置颜色缓冲区的颜色为蓝色,即设置背景色,参数(0.0f, 0.0f, 1.0f, 1.0f)指定颜色中 红、绿、蓝的成分,每个成分在01(伙伴0255)之间取值;最后一个参数指定是否透明,0表示透明,1表示不透明。glClear(GL_COLOR_BU

22、FFER_BIT); 用glClearColor命令指定的颜色清除颜色缓冲区中原来的颜色,参数GL_COLOR_BUFFER_BIT代表颜色缓冲区。glFlush(); 用于刷新OpenGL中的命令队列,使所有未被执行OpenGL命令得到执行。由于OpenGL内部使用渲染(绘图)流水线的顺序处理命令,OpenGL的命令常常会排队并成批处理,以便优化性能。glFlush函数告诉OpenGL应该处理到目前为止收到的命令。命令glFinish();除了具有glFlush()的功能外,还等待图形硬件和网络的响应,但是性能没有glFlush()高。3.运行程序 (1) 安装GLUT工具包(只需一次):先

23、下载,解压。解压后包含三个文件:glut.h,glut32.lib,glut32.dll。安装过程:* 将glut32.dll复制到Windows系统的system32文件夹中;* 将glut32.lib复制到VC的lib文件夹中;* 将glut.h复制到VC的includeGL文件夹中。(2)启动VC+,创建基于控制台的程序框架* 启动VC+(3)设置OpenGL编程环境* 在应用程序窗口,选择“Project”“Settings”“Link”* 在“Object/Library Modules”一栏中加入:opengl32.Lib、glu32.Lib、glut32.Lib,两个文件名以及与

24、原有内容之间用空格间隔。(4)运行程序* 输入代码;* 编译和连接:在应用程序窗口,选择“Build”“Compile”或“Build”。* 运行:在应用程序窗口,选择“Build”“Execute”或工具栏按钮“!”执行程序。(5)编译、修改* 窗口最下方显示编译和连接信息,如果编译出错,双击错误信息,系统自动定位到程序中的出错语句,修改后再次编译。4.程序运行结果:该程序仅创建一个系统默认的应用程序窗口。5.保存在应用程序窗口,选择“save Project”6修改display函数中的glClearColor命令中参数,观察应用程序窗口的颜色变化。7.清除程序(内存)在应用程序窗口,选择

25、“Clear Project”2阅读以下程序,掌握应用程序窗口参数的设置和渲染对象的颜色设置(前景色)1.源程序#include #include void init() glClearColor(0.0,0.0,1.0,1.0);void display(void) glClear(GL_COLOR_BUFFER_BIT);glColor4f(0.0,1.0,1.0,1.0);glRotatef(60,1.0,1.0,1.0);glutWireCube(0.8);glFlush();void main(int &argc,char *argv) glutInit(&argc,argv);gl

26、utInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(200,200);glutInitWindowPosition(100,100);glutCreateWindow(cube);init();glutDisplayFunc( display);glutMainLoop();2.程序内容理解(1)main函数glutInitWindowSize(200,200); 设置应用程序窗口的大小,参数表示宽和高。glutInitWindowPosition(100,100); 设置应用程序窗口的位置,参数表示窗口的左上角坐标。(2)in

27、it函数init函数设置应用程序的初始化,其中包括应用程序启动时执行的代码,并且往往只执行一遍。因为颜色缓冲区的颜色设置不经常变化,所以将其放入init函数中。从main函数中的调用次序可以看出,与程序一中代码的写法没有本质区别。(3)display函数glColor4f(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轴

28、,y轴,z轴)。其中,对应x轴、y轴、z轴的数值,如果为1表示饶该轴旋转,为0表示不饶该轴旋转。glutWireCube(0.8); 绘制一个边长为0.8的线框(Wire)立方体(Cube)。3.运行、保存和清除程序同程序一。4. 观察并分析程序运行结果。5.修改程序(1)修改立方体的颜色;(2)修改立方体的旋转角度;(3)修改应用程序窗口的大小和在屏幕显示位置。3glutWireCube(GLdouble size);绘制GLUT中的三维物体1.GLUT中的三维物体:命令中“Solid”表示实心物体,“Wire”图形。下面仅给出函数原型,命令的使用利用C语言知识调用。(1)立方体函数原型:g

29、lutWireCube(GLdouble size); glutSolidCube(GLdouble size);功能:绘制一个边长为siaze的立方体,立方体中心位于原点。参数说明:size为立方体的边长。(2)圆锥体数原型:glutWireCone(GLdouble base,GLdouble height,GLint slices,GLint stacks); glutSolidCone(GLdouble base,GLdouble height,GLint slices,GLint stacks);功能:绘制一个圆锥体,圆锥底面中心位于坐标原点(0,0,0),圆锥顶点位于z轴上。参数说

30、明: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(GLdouble radius,GLint slices,GLint stacks); glutSolidSphere(GLdouble radius,GLint slices,GLint stacks);功能:绘制一个球体,球体的中心位于原点,半径为radius。参数说明:Radius 球体半径, slices环绕z轴的剖面数,即球体的经线数目,stacks沿着z轴的剖面数,即球体的纬

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2