毕业论文计算机图形学——OpenGL.doc

上传人:yyf 文档编号:3942876 上传时间:2019-10-10 格式:DOC 页数:30 大小:2.45MB
返回 下载 相关 举报
毕业论文计算机图形学——OpenGL.doc_第1页
第1页 / 共30页
毕业论文计算机图形学——OpenGL.doc_第2页
第2页 / 共30页
毕业论文计算机图形学——OpenGL.doc_第3页
第3页 / 共30页
毕业论文计算机图形学——OpenGL.doc_第4页
第4页 / 共30页
毕业论文计算机图形学——OpenGL.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《毕业论文计算机图形学——OpenGL.doc》由会员分享,可在线阅读,更多相关《毕业论文计算机图形学——OpenGL.doc(30页珍藏版)》请在三一文库上搜索。

1、 2012届本科毕业论文 27 毕业论文题 目: 基于OpenGL的工艺品茶壶设计 系 别: 计算机与信息工程系 专 业: 计算机科学与技术 届 别: 2012届 目 录绪论(2)第1章 开发环境的构建(2)1.1 开发环境简述(2)1.2 Visual C+ 6.0软件简介(3)1.3 OpenGL概述(5)第2章 系统分析与设计(2)2.1 OpenGL材质与光照的原理(7)2.1.1 OpenGL物体材料的选择(8)2.1.2 OpenGL光源建立及启动(9)2.2 OpenGL几何变换的原理及设计(10)2.2.1 几何变换的原理(10)2.2.2 几何变换缩放(2)2.2.3 几何变

2、换旋转(2)2.3 OpenGL动画的设计(2)2.4 OpenGL纹理的设计(2)2.4.1 纹理映射的原理(2)2.4.2 纹理定义(2)第3章 系统实现(2)3.1 工艺品茶壶项目建立(2)3.2 Windows窗口设计以及功能实现(2)3.3 工艺品程序功能实现(2)3.3.1 makeStripeImage()函数(2)3.3.2 init()函数(2)3.3.3 display()函数(2)3.3.4 reshape ()函数(2)3.3.5 时间控件timer()函数(2)3.3.6 鼠标控件mouse()函数(2)3.3.7 动作控件motion()函数(2)第4章 运行结果与

3、分析(2)4.1 艺术品茶壶颜色变化分析(2)4.2 艺术品茶壶造型变化分析(2)4.3 艺术品茶壶纹理实现与分析(2)4.4 艺术品茶壶动画实现与分析(2)结束语(2)致谢(2)参考文献(2)基于OpenGL的工艺品茶壶设计 摘 要:近年来,图形图像制作技术发展很快,尤其是计算机图形学,图像开始进入设计领域,更加促进了设计领域的快速发展。电脑与美术的结合创造了电脑美术艺术。在产品设计、动画、场景漫游等领域都有广泛的应用。本文主要说明了在VC+6.0环境下如何使用OpenGL生成工艺品茶壶。在吸取了计算机图形学、计算机科学、光学等多领域先进理论成果的基础上,系统地论述了基于OpenGL下艺术品

4、茶壶的研究和实现及其相关理论和技术。本文主要做了以下几方面的工作:具体包括对软件程序各方面需求及可行性的分析、建立Visual C+6.0环境下的OpenGL程序框架、OpenGL下艺术品茶壶的具体实现与分析。最后,基于上述理论和成果,以Windows XP系统和Visual C+6.0为平台,利用基本OpenGL函数编程技术实现了艺术品茶壶三维图形。使最终在视觉上产生动态效果和艺术效果,达到以三维图像效果出现使观察者可以在视觉上得以享受。关键词:Opengl;茶壶(陶瓷);材质与光照;旋转;纹理实现 OpenGL-based arts and crafts design-teapotAbst

5、ract: In recent years, the graphic image production technology has developed rapidly, especially in computer graphics, images began to enter the field of design, more to promote the rapid development of the design field. The combination of computer and art to create the art of computer art. Have wid

6、e applications in the field of product design, animation, scene roaming. In this paper illustrates how to use OpenGL in VC + + 6.0 environment to generate handicraft teapot. Draw computer graphics, computer science, optics and other advanced multi-field theoretical basis of the results, the system o

7、f art teapot in OpenGL-based research and its related theory and technology.In this paper, the following aspects: including analysis of the need for and feasibility of the software program, establish the procedural framework of OpenGL in Visual C + + 6.0 environment, Implementation and Analysis of t

8、he OpenGL under art teapot.Finally, based on the above theory and results, to the Windows XP system and Visual C + + 6.0 as a platform for basic OpenGL functions programming techniques to achieve the three-dimensional graphics of the art teapot. Eventually produce dynamic visual effects and artistic

9、 effect, to achieve three-dimensional effect so that the observer can visually be able to enjoy.Keywords: OpenGL ;teapot (ceramic); Bezier surface;Materials and light;Rotation;Texture绪论随着文化和科技的飞速发展,计算机技术也得到快速的跟进与发展,计算机图形学是计算机科学中一个重要领域,它使用计算方法产生图形与图像,在人机信息交流、计算机辅助设计、科学及统计数据形象化,以及数字化艺术创作等多方面有广泛的应用。归结起

10、来计算机图形学在现代生活中起到不可忽略的作用,在计算机图形学中应用程序设计界面OpenGL是重点理论知识。OpenGL作为一种图形与硬件的接口,与其他图形程序开发工具相比较,它提供了众多图形函数,直观的编程环境简化了三维图形程序。随着3D技术越来越多的被开发,更多的开发人员选择OpenGL作为开发工具,以简化操作。目前OpenGL已成为三维图形的开发标准。本设计就是利用计算机的图形学和对图像的处理来设计茶壶工艺品,利用OpenGL软件平台下通过VC+6.0编辑语言来对工艺品的光线和颜色的物理性质、光的传播与反射,以及人的视觉系统做一些处理。本论文是从环境平台的构建、系统分析与设计、系统实现、结

11、果运行与分析这四章模块一一论述。在第一章开发环境的构建中本论文是从开发环境简述开始对VC+6.0软件和OpenGL做出简要概述,了解构建环境的基本要素以及每个要素的特点和功能,其次在本次论文设计中着重对系统的分析与设计、系统的实现做出具体的理论性分析。在第二章中主要对OpenGL的材质与光照、几何变换、动画以及纹理的实现做出原理性叙述,通过第二章基本上对设计艺术品茶壶的结构做出框架上的分析,在第二章的分支章节中又分别对物体材料的选择、光源的建立与启动、几何缩放变换、几何旋转变换等给予详细的理论解释,这样工艺品茶壶的结构基本上就在理论上形成模式,在这种模式的基础上再对艺术品茶壶做动画和纹理上的理

12、论处理。在第三章中主要是实现功能,通过VC+6.0语言按照第二章的理论分析来编写程序,第三章在本论文中是起关键性作用,它决定了工艺品茶壶是否能按照理论要求实现,所以本论文从设计的角度看第二章节是理论分析部分,第三章节是语言设计实现部分,所以二者缺一不可,这是本次论文设计的主要内容。在第四章中主要是对程序的运行结果作一一分析,通过对工艺品茶壶的颜色、造型、纹理、动画等作一一分析,得出最终的运行结果评估,确定是否和理论分析的相一致,从而确定论文设计在理论上具有说服力和实际的研究价值。总之,本论文课题在OpenGL软件平台下通过VC+6.0来对工艺品茶壶的大小、结构、颜色以及动画效果都做出了具体的叙

13、述,通过语言的编写对工艺品茶壶的具体参数进行设置,使最终在视觉上产生动态效果和艺术效果,达到以三维图像效果出现使观察者可以在视觉上得以享受。最终达到论文的理论要求,也充分体现出此次论文的实际研究价值。第1章 开发环境的构建1.1 开发环境简述Visual C+是微软公司推出的基于Windows环境的一种面向对象的可视化编程环境,被公认为微软第一计算机语言。尽管Visual C+是可视化编程中的佼佼者,但它并不是图形图像编程的最好选择。OpenGL是一个与图形硬件无关的应用程序开发接口(API),是一个完全可移植、速度很快的3D图形和建模库,具有图形质量高、可靠性高、可移植性好等众多优点,可以运

14、行在Window平台和UNIX平台上。为了利用Visual C+6.0的强大功能来实现对OpenGL三维图形的绘制,微软将OpenGL集成到了Windows中,Windows提供了OpenGL32DLL和GLU32DLL动态链接库,Visual C+6.0包含了GL库(opengl32Lib)、辅助库(glaux1ib)和实用库(glu321ib)。这使OpenGL成为最优秀的可化编程接口之一,可以方便地利用这个图形库,使编程简单、快速,OpenGL中的RGBA颜色模式,结合反走样和颜色融合,使图形图像更加逼真。所以,Visual C+6.0结合OpenGL编程是一种比较合理的选择。1.2 V

15、isual C+ 6.0软件简介Visual C+6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。Visual C+6.0由Microsoft开发, 它不仅是一个C+ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Develop

16、er Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。通常使用Visual C+6.0软件时,可以在正规软件下载网站上下载VC+6.0

17、,存放在本地磁盘。运行.exe文件,按安装向导一步一步的操作,直到VC+ 6.0安装成功。Visual C+6.0软件的特点:(1)Visual C+6.0是Microsoft公司推出的功能最强大、最复杂的编程语言之一,它基于C/C+语言,因此在学习它之前应该对C+程序设计语言以及Visual C+6.0的特点做一了解;(2)Visual C+6.0是运行于Windows操作系统中的交互式、可视化集成开发软件,它是在Windows环境下进行大型软件开发的首选编程语言,同其他可视化开发软件一样,Visual C+6.0集程序的代码编辑、编译、连接、调试等功能于一体,为编程人员提供一个既完整又方便

18、的开发环境;(3)除了和其他软件所共同的优点以外,Visual C+6.0还具备一些其他可视化集成开发软件不具备的特点;(4)Visual C+6.0的语法符合ANSIC+标准,并在此基础上针对Windows操作系统增加了一些语句;(5)集成了MFC类库,MFC封装了Windows API函数和消息,使编程人员可使用它高效率地开发各种应用程序;(6)提供了MFC AppWizard,可方便地生成程序框架;(7)提供了基于MFC的ClassWizard,通过它可轻松完成对各种MFC类的使用与维护。1.3 OpenGL概述微软每推出一个重要的Windows版本,一般都会同时推出一个SDK(Soft

19、ware Development Kit)。SDK包含了开发该Windows版本所需的Windows函数和常数定义、API函数说明文档、相关工具和示例。SDK是Software Development Kit的缩写,中文意思是“软件开发工具包”。 开发 Windows 平台下的应用程序所使用的 SDK只是广义 SDK 的一个子集。首先要接触的是“API”,也就是 Application Programming Interface,其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。在 Windows 中,系统 API 是以函

20、数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中所要做的就是调用 GetVersionEx() 函数。DLL即 Dynamic Link Library(动态链接库)。我们经常会看到一些 .dll 格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。为了使用 DLL 中的 API 函数,我们必须要有 API 函数的声明(.H)和导入库(.LIB)1。OpenGL是一种过程性而不是描述性的图形API,它并不描述场景以及外观。OpenGL

21、的基础是以两百多个函数组成。比如四方体、长方体等。另外,OpenGL支持RGBA颜色模式、光照、缩小放大、旋转以及许多其它特殊效果和功能。这些函数分放在两个函数库内:一个是OpenGL核心函数库(Core Library),称为gl或GL,另一个是OpenGL实用函数库(Utility Library),称为glu或GLU。实用函数库中的函数是用核心函数库中的函数库写成。如图1所示。图1 Opengl API框图另外还有一个为与系统无关的视窗及交互操作提供支持的OpenGL实用工具库(Utility Toolkit),称为glut或GLUT,该工具库已在不同的系统平台上实现,通过适当的函数库与

22、底层的视窗操作系统接口。例如WGL用于微软视窗(Microsoft Windows)。OpenGL可以被看成是一台状态机,即一个由它当前的状态来决定其行为的系统,而这个系统当前的状态则取决于各系统变量与系统设置此时此刻的值。大多数OpenGL函数分属两个类型:一类用于改变系统的状态(例如向帧缓冲器画图所用的颜色,以及将三维物体投影到二维视平面的方式),另一类则将代表几何物体的数据传给系统进行处理(例如用系统目前设定的画图颜色在给定的两点之间画一条直线,或者用系统目前设定的投影方式画出一张书桌的正视图)。在图形实现流程中,OpenGL及其他图形API的内在工作方式有一个重要的结构与操作特征,即图

23、形实现流程或图形流水线。对图形API而言,代表要描绘的几何物体的数据构成图形流水线的输入。流水线按系统的默认设置或用户指定的设置完成如空间操纵(包括移动、缩放、旋转)等各种操作,最后产生一幅描绘这些物体的图像。流水线由两步组成:几何变换与扫描转换。几何变换旨在对进入流水线的数据履行空间操纵,扫描转换则将变换后的物体映射到图像空间,也就是像素坐标系所在的离散空间。OpenGL是专门为三维图像生成而设计的。其中没有单独的二维绘图流水线,所有二维都作为对应的在维操作的特例(z=0)来处理。三维图形流水线除此之外还需要几项附加作业。作业之一是将三维信息投影到二维视平面上,这项操作等价于照相时镜头所起的

24、作用。另一项作业是隐藏面消隐,被处于观察者视线上的不透明物体部分或全部遮挡的物体表面不应出现的图像里。此外还有必要进行光照计算以模拟物体表面的自然阴影。许多应用程序(特别是交互式应用程序)利用OpenGL实用工具库为事件驱动程序设计所提供的支持2。此种应用程序通常在必要的初始化之后进入GLUT事件处理循环。在Opengl函数语法以及语法的规定中通常对数据的类型有一定的要求。由于原始数据类型(如整型)的长短大小可能因系统不同而有差异,OpenGL采用名为Glint,GLfloat及GLdouble等内置数据类型。第2章 系统分析与设计工艺品茶壶设计是一个集颜色、材质与光照、几何变换等于一体的功能

25、实现。其中茶壶颜色的变换,体型的改变是整个设计的核心部分,再加上材质与光照的渲染,使整个茶壶的设计更加真实。在这一论文中,采用OpenGL技术,通过读入.cpp文件,在茶壶结构、颜色变换、三维视角下观察茶壶等方面完成代码实现。下面就分别对这些实现技术进行详细的介绍。2.1 OpenGL材质与光照的原理从视觉角度讲,光有三个基本特征。第一个称为亮度,这对应于光的称为光度的物理性质。光度是对光所携带的总能量的度量。光的光度越高,它对观察者来说就越明亮。光的第二个视觉上的特征称为色调,这是用来将白光与红光或绿光区分开来。从理想化的能量分布的光来讲,色调对应于另一个称为该分布的主导波长的物理性质。第三

26、个视觉上的特征称为饱和度,用来描述光的鲜艳程度。饱和度对应于称为激励纯度的物理性质。后者被定义为光度中分配给主导或纯正颜色部分的百分比3。三基色理论在光学中属于最基本的理论知识,假定S代表某一给定光,即引起颜色感觉的外界刺激。我们可以通过按适当比例将来自三种颜色(三原色)的光源的光混合在一起来取得S的效果(也就是看到S的观察者的颜色感觉): S=r红+g绿+b蓝换句话说,对于观察者来说,给定光和来自三原色光源的成比例的混合光看起来完全一样。理论上只要三种颜色中没有任何一种可以用另外两种的线性组合来表示,也就是说没有任何一种的视觉效果可以通过另外两种的线性混合来获得,这三种颜色就构成一组三原色3

27、。OpenGL用材料对光的红、绿、蓝三原色的反射率来近似定义材料的颜色。象光源一样,材料颜色也分成环境、漫反射和镜面反射成分,它们决定了材料对环境光、漫反射光和镜面反射光的反射程度。在进行光照计算时,材料对环境光的反射率与每个进入光源的环境光结合,对漫反射光的反射率与每个进入光源的漫反射光结合,对镜面光的反射率与每个进入光源的镜面反射光结合。对环境光与漫反射光的反射程度决定了材料的颜色,并且它们很相似。对镜面反射光的反射率通常是白色或灰色(即对镜面反射光中红、绿、蓝的反射率相同)。镜面反射高光最亮的地方将变成具有光源镜面光强度的颜色。例如一个光亮的红色塑料球,球的大部分表现为红色,光亮的高光将

28、是白色的。在材质RGB值和光源RGB值的关系中材质的颜色与光源的颜色有些不同。对于光源,R、G、B值等于R、G、B对其最大强度的百分比。若光源颜色的R、G、B值都是1.0,则是最强的白光;若值变为0.5,颜色仍为白色,但强度为原来的一半,于是表现为灰色;若RG1.0,B0.0,则光源为黄色。对于材质,R、G、B值为材质对光的R、G、B成分的反射率。比如,一种材质的R1.0、G0.5、B0.0,则材质反射全部的红色成分,一半的绿色成分,不反射蓝色成分。也就是说,若OpenGL的光源颜色为(LR、LG、LB),材质颜色为(MR、MG、MB),那么,在忽略所有其他反射效果的情况下,最终到达眼睛的光的

29、颜色为(LR*MR、LG*MG、LB*MB)。同样,如果有两束光,相应的值分别为(R1、G1、B1)和(R2、G2、B2),则OpenGL将各个颜色成分相加,得到(R1+R2、G1+G2、B1+B2),若任一成分的和值大于1(超出了设备所能显示的亮度)则约简到1.0。在实际应用的许多情况下,不同的物体或同一物体的不同部分都有可能设置不同的材质,OpenGL函数库提供了两种方式实现这种要求。2.1.1 OpenGL物体材料的选择OpenGL系统的光照与着色功能主要是基于Phong模型与Gouraud着色法,制作茶壶过程中所需要的材质与光照就是首先要定义物体表面的材料特性,建立光源,选择光照与着色

30、参数,然后再启动光照计算4。物体的前面和后面中的每一个都有许多个材料特性,一旦启动光照,系统所保持的当前材料特性就被用来决定表面的着色。每个特性可以通过调用语句:glMaterialfv(Glenum face,Glenum pname,TYPE pvalue)其默认值或当前值改为其他值。其中Glenum face是用来指明要作的改变应该对哪一面或两面生效,有GL_FRONT,GL_BACK或GL_FRONT_AND_BACK的符号常数;Glenum pname是用来指定要改变的材料特性的符号常数(见表1);TYPE pvalue是指向一个为该特性提供新值的GLfloat数组的指针。表1 代表

31、材料特性的符号常数特性名称默认值备注GL_AMBIENT(0.2,0.2,0.2,1.0)环境光GL_DIFFUSE(0.8,0.8,0.8,1.0)漫反射GL_AMBIENT_AND_DIFFUSE环境光、漫反射GL_SPECULAR(0,0,0,0.1)GL_SHININESS(0)GL_EMISSION(0,0,0,0.1)论文设计中对工艺品茶壶在材质和光照上的选择是有要求,如果采用不同的角度去观察,会发现茶壶的表面颜色鲜艳程度与光照亮度成正比。如用计算机来实现的茶壶视觉与现实中的茶壶相近,指定一个物体材料特性比较难完成的。所以为了使设计出来的茶壶呈现出来的更加逼真,我采用三个不同的位置

32、不同的材料特性从分别从正面、背面和两面三种情况进行设置。2.1.2 OpenGL光源建立及启动在OpenGL简单光照模型中的几种光分为:辐射光(Emitted Light)、环境光(Ambient Light)、漫射光(Diffuse Light)、镜面光(Specular Light)。辐射光是最简单的一种光,它直接从物体发出并且不受任何光源影响。环境光是由光源发出经环境多次散射而无法确定其方向的光,即似乎来自所有方向。当环境光照到曲面上时,它在各个方向上均等地发散(类似于无影灯光)。漫射光来自一个方向,它垂直于物体时比倾斜时更明亮。一旦它照射到物体上,则在各个方向上均匀地发散出去。镜面光来

33、自特定方向并沿另一方向反射出去,一个平行激光束在高质量的镜面上产生100%的镜面反射。因此,从某种意义上讲,物体的反射程度等同于其上的光强(或光亮度)5。在OpenGL中允许应用程序使用多达八个光源,每个光源都由一组特性定义,包括它的位置。这G光源定名为GL_LIGHT0,GL_LIGHT1,GL_LIGHT7。应用程序可以通过调用语句: glLightfv(GLenum light,GLenum pname,TYPE*p)来设置指定光源的指定特性。其中GLenum light用来指定光源的符号常数,如GL_LIGHT0;GLenum pname指定要改变的特性的符号常数,如GL_AMBIEN

34、T;TYPE*p是指向一个为该特性提供新值的GLfloat数组的指针。在OpenGL中调用glLightfv来设置光源的位置或方向时,系统当前的建模与观察矩阵是要对代表该位置或方向的坐标值进行变换的,当灯源在不同的位置或方向时,就可以获得不同的视觉效果。所以在这次设计工艺品茶壶的光源设置中,可以在整个场景中只设一个不动的光源,让物体与观察者的视角发生改变。由此来静向的观察动态的物体,如同实际中拿着茶壶进行翻转察看效果一样。在光源建立的基础上可以通过下面两条语句来启动光照,通常条件下Opengl的默认设置是用当前的颜色来画当前的顶点,所以如果要启动当前光照那么就要通过下列语句来启用: glEna

35、ble(GL_LIGHTING);另外,每个光源都要在建立之后再经过启动才能用在光照计算中。下列语句启动GL_LIGHT0: glEnable(GL_LIGHT0);要终止光照或停止使用某一特定光源,则需以相应的符号常数为参数调用glDisable。2.2 OpenGL几何变换的原理及设计2.2.1 几何变换的原理计算机图形系统的基本功能之一是模拟在空间对物体进行操纵。这种模拟的空间操纵称为变换。我们可以从两种互补的观点出发来描述物体的变换。第一种是物体本身相对于一个固定不动的坐标系或背景作变换。此观点从数学角度讲就是对物体上的每一个点进行几何变换。第二种观点将物体看成固定不动,而坐标系则相对

36、于物体作变换。这一效果可通过进行坐标变换来取得。物体的空间操纵有三种基本形式。第一,它们可以在不改变大小和朝向的前提下移动到新的位置。第二,它们可以被放大和缩小。第三,它们可以绕一个点或一条轴旋转。但本论文设计中只应用了后两者几何变换。在OpenGL程序设计中,在缩放以及旋转几何变换时首先必须建立modelview的矩阵。它是和来进行建模变换与观察变换的合成变换矩阵6。这个建模与观察矩阵的初始化可以通过以下语句完: glMatrixMode(GL_MODELVIEW); glLoadIdentity();其中glMatrixMode将建模与观察矩阵设为系统当前的矩阵,所有随后指定的变换都对当前

37、的矩阵生效。2.2.2 几何变换缩放基本的缩放变换是相对于坐标系的原点来定义的,它用一组缩放因数乘以物体上的点的坐标(每个因数乘以与其对应的坐标)来取得缩放效果。图2表示以Sx为坐标x的缩放因数,Sy为y坐标的缩放因数的二维几何缩放变换S(Sx,Sy):如果 Sx=Sy,该变换就称为均匀缩放,它能保持物体形状不变。图2 二维缩放(几何变换)但由于缩放是相对于坐标系的原点进行的,缩放后物体在位置上也有所移动。我们可以用定点缩放来对物体的位移现象加以控制:相对于物体上的一个参考点进行缩放,进而使得该参考点在缩放变换后仍然留在它的原始位置上。定点缩放可以分三步进行:首先对物体作平移变换以将参考点(X

38、c,Yc)移到坐标系的原点,然后对平移后的物体作相对于原点(此时也就是参考点)的缩放变化,最后对缩放后的物体作平移变换以将参考点移回到它的原始位置(见图3)。整个变换序列可以用函数合成的形式来表达:T(Xc,Yc)S(Sx,Sy)T(-Xc,-Yc)。 图3 二维定点缩放在二维缩放的基础上,增加一个独立的第三维并可以类似方式处理来定义三维几何缩放S(Sx,Sy,Sz)以及与其互补的三维坐标缩放S(1/ Sx,1/ Sy,1/ Sz)。如果Sx = Sy = Sz,该变换就称为均匀变换。计算(x,y,z)的公式为:缩放功能的设计可以通过调用glScale*语句来实现:void glScalef

39、d(TYPE Sx ,TYPE Sy,TYPE Sz)其中函数三个参数Sx,Sy,Sz分别为物体在x,y,z三个方向上缩放的比例。2.2.3 几何变换旋转图4 二维旋转(几何变换)平面上的旋转是相对于一个点(旋转中心)来进行的,而空间中的旋转则是相对于一条轴来完成。我们将基本的两维旋转定义为绕xy坐标系的原点进行。图4表示位于(x,y)的点经过大小为角的两维几何旋转R()后的新位置(x,y)。首先考虑斜边连接原点及(x,y)的直角三角形并使用三角恒等式来得到:然后从斜边连接原点及(x,y)的另一个直角三角形得到x=rcos和y=rsin。将此结果代入上式就有: 在二维旋转的基础上,来实现三维旋

40、转7。三维旋转有三种基本方式:绕z轴旋转(见图5(a)和6(a),绕x轴旋转(见图5(b)和6(b),绕y轴旋转(见图5(c)和6(c)。与正旋转角在二维旋转中意味着反时针旋转的规定一致,正旋转角在三维旋转中意味着旋转方向按右手定则确定(拇指与旋转轴指向相同时,其余四指给出旋转方向)。图5 三维旋转(几何变换)图6 三维旋转(几何变换)绕y轴旋转时(既包括几何变换Ry()也包括与其互补的坐标变换Ry(-))物体上的点的y坐标保持不变。这就是说每个点可以看成是一个与xz平面平行的平面上旋转旋转方式与一个在xz平面上的点完全相同。于是我们可以得出三维旋转公式:旋转变换可以通过调用glRotate*

41、语句来实现:void glRotatef d(TYPE angle, TYPE x, TYPE y, TYPE z)其中该函数有四个GLfloat或GLdouble类型的参数:angle,x,y和z。angle表示要旋转的角度,以度数方式表示,为0360之间的值;x,y,z构成一个向量,依次代表该向量x,y,z三个方向上的分量值,旋转是按反时针方向围绕从原点到(x,y,z)的轴进行。在论文设计中单方面的对X轴、Y轴、Z轴中的某一轴定义旋转这样会使工艺品茶壶在实现旋转时存在单一性和局限性,所以通过程序的编写对参数的改变使旋转可以通过任意轴旋转来完成,在设计中可以围绕一条经过某一点并与它的方向向量

42、同向的轴线作为任意轴旋转。2.3 OpenGL动画的设计本论文在设计过程中为了达到艺术上的效果和最终在视觉上产生动态效果,达到以三维图像效果出现,通过运行程序所设计有工艺品茶壶会自行按照Y轴旋转同时它的外形以及颜色也会发生改变,在人为的单击控制下可以在运行和停止之间相互切换,这样就实现了Opengl的动画设计。在Windows编程模型设计中,用计时器方法来实现动画是非常简洁。在编程环境下创建一个计时器,该计时器通知Windows想让WM_TIMER消息隔多长时间给当前的窗口发送信息。Windows通过响应这个消息,就能够以一定的时间间隔完成所要完成的任务和达到最终想得到的效果。处理计时器事件时

43、,设置一个情况语句用来处理WM_TIMER消息,在该消息处理语句中,可以实现OpenGL中所要求的渲染,贴图等,也可以产生连续更新的图像8。下面就是实现动画的过程的语句: glutPostRedisplay(); glutTimerFunc(200,timer,0);在语句中glutTimerFunc(200,timer,0);语句就是初始时注册一个定时器的回调函数。glutPostRedisplay();表示标记当前窗口需要重新绘制。2.4 OpenGL纹理的设计2.4.1 纹理映射的原理纹理映射是一项有助于获得比较真实感和多样化胡表面着色技术,在二维纹理图中对映射函数的一个常规制约是要使纹

44、理图成比例地伸展和收缩。可以写出:U=As+B v=Ct+D其中的常数A,B,C和D由纹理空间和参数空间中的已知点之间的关系导出9。 纹理图通常含有可以用来以不同方式改变物体表面的原始着色的颜色值。然而其作用还可以扩展到提供其他种能够影响着色过程的结果的信息。OpenGL系统中实现纹理映射包括5个基本步骤:(1)建立一个纹理并指定其纹理类型;(2)指明该纹理的使用方式;(3)为该纹理对象产生一张纹理图;(4)启用纹理映射功能;(5)通过为各顶点提供几何坐标以及纹理坐标来绘制接受映射的物体。2.4.2 纹理定义(1)一维纹理定义的函数void glTexImage1D(GLenum target

45、,GLint level,GLint components,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid *pixels);定义一个一维纹理映射。其中参数target是常数GL_TEXTURE_1D。参数level表示多级分辨率的纹理图像的级数,若只有一种分辨率,则level设为010。参数components是一个从1到4的整数,指出选择了R、G、B、A中的哪些分量用于调整和混合,1表示选择了R分量,2表示选择了R和A两个分量,3表示选择了R、G、B三个分量,4表示选择了R、G、B、A四个分量。参数widt

46、h和height给出了纹理图像的长度和宽度,参数border为纹理边界宽度,它通常为0,width和height必须是2m+2b,这里m是整数,长和宽可以有不同的值,b是border的值。纹理映射的最大尺寸依赖于OpenGL,但它至少必须是使用64x64(若带边界为66x66),若width和height设置为0,则纹理映射有效地关闭。参数format和type描述了纹理映射的格式和数据类型,它们在这里的意义与在函数glDrawPixels()中的意义相同,事实上,纹理数据与glDrawPixels()所用的数据有同样的格式。参数format可以是GL_COLOR_INDEX、GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_LUMINANCE或GL_LUMI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1