毕业设计(论文):三维图像的生成与显示技术研究.doc

上传人:文****钱 文档编号:41799 上传时间:2018-05-09 格式:DOC 页数:40 大小:1.43MB
下载 相关 举报
毕业设计(论文):三维图像的生成与显示技术研究.doc_第1页
第1页 / 共40页
毕业设计(论文):三维图像的生成与显示技术研究.doc_第2页
第2页 / 共40页
毕业设计(论文):三维图像的生成与显示技术研究.doc_第3页
第3页 / 共40页
毕业设计(论文):三维图像的生成与显示技术研究.doc_第4页
第4页 / 共40页
毕业设计(论文):三维图像的生成与显示技术研究.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、I毕业设计(论文)课题名称三维图像的生成与显示技术研究II摘要最早人们见到的图像都是平面图像,也就是通常所说的二维图像,但自21世纪以来二维图像早已不能满足人们的视觉要求,之后3D化像风暴一样席卷而来。3D图形系统能够较形象的模拟和表示客观物体,易于通过模拟光线照射物体表现物体的质感。OPENGL是优秀的开放的2D3D图形标准,由OPENGL体系结构委员会ARB所掌管。OPENGL图形系统是图形硬件的一个软件接口,它强大的渲染管线能够绘制出逼真的虚拟场景,使图像看起来更加真实,就像每一个人平时所看到的一样或至少接近人眼所看到的内容。本文研究了基于OPENGL的三维视景应用程序的初始化、世界坐标

2、系和模型局部坐标系之间的关系和平移旋转并缩放的矩阵表示以及如何将景中的模型分解为OPENGL可以接受的图元信息,建立了一个卫星与深空场景的动态仿真系统,该系统根据各个天体运行规律,详细计算了卫星及各星体的运行轨迹,真实地模拟了深空场景的动态变化,能够实时地模拟不同视角、不同时间的卫星及深空动态场景。关键词3D图形OPENGL模型视图变换类封装卫星IIIABSTRACTTHEEARLIESTIMAGESWESEEAREPLANEIMAGES,2DIMAGEISUSUALLYSAID,BUTSINCETWENTYFIRSTCENTURYTHETWODIMENSIONALIMAGEALREADYCA

3、NNOTSATISFYPEOPLESVISUALREQUIREMENTS,AFTER3DSWEPTLIKEASTORMTHE3DGRAPHICSSYSTEMSIMULATESANDREFLECTSOBJECTSINTHEREALWORLDVIVIDLYOPENGLISA2D3DGRAPHICSSTANDARDINCHARGEOFARCHITECTUREREVIEWBOARDARBANDISASOFTWAREINTERFACETOHARDWAREITSPOWERFULPIPELINEISCOMPETENTFORRENDERINGGRAPHICSSCENE,MAKESTHEIMAGELOOKMOR

4、EREAL,JUSTLIKEEVERYPERSONUSUALLYSEETHESAMEORATLEASTCLOSETOTHEHUMANEYECANSEECONTENTTHISPAPERSTUDYTHE3DOPENGLAPPLICATIONINITIALIZATION,THEWORLDCOORDINATESYSTEMANDTHEMODELOFLOCALCOORDINATESYSTEMANDTHERELATIONSHIPBETWEENTRANSLATIONANDROTATIONANDSCALINGMATRIXREPRESENTATIONANDHOWWILLTHEKINGINTHEMODELISDEC

5、OMPOSEDINTOPRIMITIVEINFORMATIONBASEDONOPENGLCANACCEPT,ESTABLISHEDADYNAMICSIMULATIONSYSTEMOFASATELLITEANDDEEPSPACESCENE,THESYSTEMACCORDINGTOEACHOBJECTOPERATIONRULES,DETAILEDTRAJECTORYOFSATELLITEANDTHESTARSWERECALCULATED,REALISTICSIMULATIONOFTHEDYNAMICCHANGESOFDEEPSPACESCENE,REALTIMESIMULATIONOFDIFFER

6、ENTPERSPECTIVES,DIFFERENTTIMEOFTHESATELLITEANDDEEPSPACEDYNAMICSCENEKEYWORDS3DGRAPHICSOPENGLMODELVIEWTRANSFORMATIONWRAPPINGWITHCLASSSATELLITEIV目录第一章绪论111研究背景和意义112OPENGL简介1121OPENGL工作方式1122OPENGL渲染管线2123OPENGL数据类型313本文框架结构3第二章三维图形学的国内外研究现状及发展421国内外研究现状422三维图形学发展4221三维图形学硬件的发展4222三维图形学软件的发展5223三维图形学算法

7、的研究范畴523计算机三维图形学的应用5第三章OPENGL实现三维图像显示的基本理论631场景坐标系6311坐标系及观察流程6312OPENGL坐标系方向7313模型视图变换7314提高绘图效率和场景的层次性832投影8321透视投影8322正投影10323投影变换示例1133窗口与视口11331视口变换11332变换深度坐标1234几何图元的绘制12341点13342直线13343多边形13344矩形14345曲线和表面14第四章三维图像显示的实现及分析1541概要设计1542WINDOWS操作系统下OPENGL应用程序初始化16421应用程序依赖库16422像素格式17423渲染描述表17

8、43建模技术概述18431基于几何造型的建模技术18432基于图像的建模技术18V433卫星建模示例1944色彩的渲染20441颜色20442纹理贴图22443位图读取2445用户交互与动画25451用户交互25452动画2546相关算法及原理描述2747卫星与深空动态场景合成27471场景合成方法27472加速绘制方法2848结果分析29第五章总结与展望3151总结3152展望31致谢36参考文献37附录391第一章绪论最早人们见到的图像都是平面图像,也就是通常所说的二维图像,但自21世纪以来二维图像早已不能满足人们的视觉要求,之后3D化像风暴一样席卷而来,人们对三维图像的研究也越来越深入。

9、11研究背景和意义近几年,利用计算机虚拟现实技术生成动态场景的仿真图像已被广泛地应用于遥感、虚拟战场仿真、目标识别与跟踪、通信等领域。而卫星与深空动态场景的仿真是实现卫星与地球通信的三维通信的关键技术之一。同时,航天事业作为一种高投入、高风险的科技密集型行业,可视化仿真系统的研制是降低其成本和风险、提高成功率的有效途径之一。12OPENGL简介OPENGL是图形硬件的一种软件接口。OPENGL全称OPENGRAPHICSLIBRARY,是一个优秀的专业化的3D的APIAPPLICATIONPROGRAMMINGINTERFACE。作为与DIRECTX类似的语言,OPENGL最早是以SGI为图形

10、工作站开发的图形开发接口IRIXGL,它可以独立于操作系统于硬件环境。程序员只需进行布景、建模、光照与渲染然后调用相应的OPENGLAPI指令,无须与图形硬件直接打交道。OPENGL负责与操作系统和底层硬件交互。OPENGL与C语言紧密结合。OPENGL的语法遵从C语法,由于C语言应用的广泛,使得程序员很容易掌握OPENGL指令集。OPENGL具有很高的可移植性。OPENGL的设计目标就是作为一种流线型的、独立于硬件的接口,在当今大部分主流操作系统UNIX/LINUX、WINDOWS98/NT/2000/XP/VISTA和MACOS等都有其相应的实现。然而为了达到这个目标,OPENGL并未包含

11、用于执行窗口任务或者获取用户输入之类的函数。反之,必须通过窗口系统控制所使用的特定硬件。类似地,OPENGL并没有提供用于描述三维物体模型的高层函数这类函数可能允许你指定相对较为复杂的形状、例如汽车、身体的某个部位、分机或分子等。在OPENGL中,必须根据少数几个基本图元GEOMETRICPRIMITIVE例如点、直线、多边形来创建你所需要的模型。OPENGL可进行高性能的图形渲染。OPENGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OPENGL提供强力支持,激烈的竞争中使得OPENGL性能一直领先。121OPENGL工作方式OPENGL指令模式是C/SC1IENT/SERV

12、ER,客户/服务器模型,通常用户程序客户发出命令提交给内核程序服务器,内核程序再对各种指令进行解释,并初步处理,2之后交给操作系统服务而转交给硬件。上述过程可以在同一台计算机上完成,也可以在网络环境中,由不同的计算机合作完成,OPENGL通过上述合作实现网络透明。图11OPENGL工作流程OPENGL指令集封装在库或共享程序集中,应用程序发出OPENGL命令后,OPENGL调用被这些库处理。然后传递服务内核处理后进一步交由操作系统,操作系统根据具体的硬件,例如不同的显示卡进行具体处理。如调用厂家的服务驱动程序或调用公共驱动程序,最后传递给视频显示驱动,而驱动程序驱动显示卡向显示屏幕提供显示。整

13、个处理过程都在计算机后台完成,基本不需要程序员参与。程序员只需要开发应用程序部分,管理硬件的工作交由计算机完成。122OPENGL渲染管线OPENGL具有超强的图形绘制能力,包括绘制物体、启动光照、管理位图、纹理映射、动画、图像增强以及交互技术等功能。作为图形硬件的软件接口,OPENGL主要是将三维的物体投影到一个二维平面上,之后处理得到像素,进行显示。OPENGL首先将物体转化为可以描述物体集合性质的顶点VERTEX与描述图像的像素PIXEL,在执行一系列操作后,最终将这些数据转化成像素数据。也就是说,OPENGL是基于点的。在OPENGL中,无论何种情况,指令总是被顺序处理。由一组顶点定义

14、的图元PRIMITIVE执行完绘制操作后,后继图元才能起作用。绝大部分OPENGL实现都有相似的操作顺序,即称为OPENGL渲染管线的一系列相关的处理阶段。应用程序OPENGL内核服务显示器显示卡显卡驱动操作系统服务包含OPENGL指令OPENGL指令集(WINDOWS上以DLL形式存在)3123OPENGL数据类型OPENGL定义了自身的数据类型,主要有GLBYTE,GLSHORT,GLINT,GLFLOAT,GLDOUBLE,GLUBYTE,GLUSHORT和GLUINT。不同的OPENGL实现在选择哪些C语言数据类型来表示OPENGL数据类型方面存在一些差异。使用OPENGL定义的数据类

15、型,就可以在OPENGL代码跨平台移植时避免类型不匹配的问题。13本文框架结构本文通过对三维图像的生成及显示理论进行系统认真的学习和研究,查阅了大量的国内外相关的文献和资料,主要完成了三维图像的图像建模、色彩渲染、动画应用等。本文的主要结构如下所示第一章,绪论。本章首先介绍了三维图形学研究的背景和意义,然后简述了OPENGL的理论框架,最后陈述了本文的内容安排。第二章,国内外研究现状。本章介绍了三维图形学的历史、发展及将来的研究方向。然后介绍了其在太空通信方面的应用。第三章,OPENGL实现三维图像显示的基本理论。本章详细阐述了OPENGL的基本原理,首先讲述了OPENGL场景坐标的建立,然后

16、介绍了OPENGL投影的变换,窗口视口的计算以及基本图元的绘制。第四章,三维图像的实现及结果分析。本章介绍了OPENGL的初始化和三维图像的建模、色彩渲染、动画应用,以及卫星在深空场景仿真的实现。第五章,总结和展望。本章总结了本设计所完成的工作,并对其中的缺陷做出了说明,指出了所实现的三维图像在通信方面的不足,对下一步的工作做了展望。4第二章三维图形学的国内外研究现状及发展21国内外研究现状当前,研究卫星及深空场景仿真的工作还不太多。MRC和波音宇航公司等最早开发出天体背景描述器CBSD。可得到指定时刻的任意方向和任意大小视场的星空场景;HALLET建立了在轨飞行器可视化计算机图形系统;HAG

17、EDORN利用虚拟现实技术,采用交互图形工作站对飞行器试验任务提供支持;STANDRIDGE采用2维和3维空间建模的方法。通过可视化仿真技术演示和观察地心轨道上卫星运行状态。STYTZ开发了一组十分简洁的卫星姿态显示模型及仿真软件,其能较逼真地动态显示在轨卫星姿态变换动画。KENNETH对通讯卫星在太空运行的场景及不同姿态对通讯的影响进行了仿真;ANDREW提出了一个太空飞船飞行模拟的框架。国内这方面的研究起步较晚,2001年提出了可将虚拟现实技术与卫星仿真技术相结合,辅助卫星的设计、制造和发射实现了一个面向卫星系统仿真的可视化环境,可显示卫星系统运行过程的动态三维场景,并对小卫星轨道姿态控制

18、系统仿真进行了研究;从可视交互仿真模型设计的角度提出了人造地球卫星的一组几何定轨方法,对惯性卫星组合导航开发平台的可视化仿真和实现进行了研究;利用三维可视化技术实现了挠性卫星飞行姿态的计算机三维动画仿真;在上述工作的基础上,本文提出了一个卫星与深空场景实时生成的方法,基于真实的卫星轨道及天文学星表数据,综合了计算机图形学及天文学知识,模拟出卫星的运动过程及其与星空的合成场景;同时采用一系列加速绘制技术,实时生成了卫星与深空动态场景并能进行多视点交互虚拟漫游。22三维图形学发展三维图形学的发展主要包括硬件、软件和算法三方面的发展。221三维图形学硬件的发展1被动式三维图形学1950年,美国麻省理

19、工学院MIT的旋风1号计算机,是世界上第一台图形显示器。用一个类似于示波器的CRT来显示一些简单的图形。1958年,美国CALCOMP公司由联机数字记录仪发展成滚筒式绘图仪。1958年,GERBER公司把数控机床发展成为平板式绘图仪。50年代末,MIT的林肯实验室在旋风计算机上开发的SAGE空中防御系统,第一次使用了具有交互功能的CRT显示器。2交互式三维图形学60年代中期使用随机扫描显示器,60年代后期使用存储管式显示器,70年代中期出现了基于电视技术的光栅图形显示器。580年代出现了光栅图形显示器的PC和图形工作站。图形输入设备如光笔、鼠标、操纵杆、键盘T跟踪球拇指轮等也同时在不断更新和发

20、展。3沉浸式三维图形学虚拟现实系统VIRTUALREALITYSYSTEM;增强现实系统AUGMENTEDREALITYSYSTEM将真实世界信息和虚拟世界信息无缝集成;相应图形硬件如数据衣、数据手套、数据鞋以及头盔、立体眼镜、运动捕获设备等得以迅速的发展。222三维图形学软件的发展1974年,美国国家标准化局ANSI提出了制定图形软件功能标准化的基本规则。此后,美国计算机协会ACM成立了图形标准化委员会。1977年提出了“核心图形系统“CGSCOREGRAPHICSSYSTEM的规范;ISO发布了计算机图形接口CGI,计算机图形元文件标准CGM,计算机图形核心系统GKS,程序员层次交互式系统

21、PHIGS,基本图形转换规范IGES,产品数据转换规范STEP等计算机三维图形标准;在各种三维图形标准之上,开发了各种应用图形软件3DMAX,MAYA,CORELDRAW,LIGHTSCAPE等,广泛应用于制造、军事、地质、农业、科研、商务、教育、影视媒体等各个领域。223三维图形学算法的研究范畴基于三维图形设备的基本图形元素的生成算法;基本三维图形元素的几何变换、投影变换和窗口剪裁等;自由曲线曲面的插值、拟合、拼接、分解、过渡、光顺、整体修改、局部修改等;三维图形元素点、线、面、体的求交、分类及集合运算;隐藏线、隐藏面的消除以及具有光照效果的真实感图形显示;不同字体的点阵表示,矢量中、西文字

22、符的生成与变换;三维形体的实时显示和图形的并行处理;三维图形用户界面及交互技术;虚拟现实环境的生成及其控制算法等。23计算机三维图形学的应用科学数据可视化SCIENTIFICVISUALIZATION,人机交互技术,影视制作FILMS,游戏GAMES,医学手术导航、医学图像处理MEDICALIMAGING,CAD/CAM,军事,图形用户界面USERINTERFACE。6第三章OPENGL实现三维图像显示的基本理论人们能够观察到图像,实际上是图像在人眼的视网膜上成像的结果,而要完成图像的显示就必须要建立图像坐标,下面我们就从图像的坐标建立开始说起。31场景坐标系计算机产生的图形存在于几何学所研究

23、的仿射空间中口1。从基本数学概念上来说,一个坐标系对应了一个仿射空间AFFINESPACE,当矢量从一个坐标系变换到另一个坐标系时要进行线性变换LINEARTRANSFORMATION。对点来说,要进行仿射变换AFFINETRANSFORMATION。因此用同源坐标,它能在对矢量进行线性变换的同时对点进行仿射变换。坐标变换的基本操作就是将变换矩阵乘以矢量或点。仿射空间中不存在原点,也不包括任何定义长度和角度的机制。但是在计算机图形学中,模型比如卡车或虚拟世界一般只是考虑相对坐标,因此没有任何点被真正的区分区。311坐标系及观察流程物体模型要显示在屏幕上必须最终确定其显示的位置,即物体在设备坐标

24、系中的位置。但逻辑上物体的位置总是在待渲染的场景中确定的,即建模坐标系中的位置。场景设计者设置物体在建模坐标系中的位置,然后OPENGL将其最终转换成显示设备坐标系中的位置。其中设计人员需要指定建模坐标系并将其传递给OPENGL,以供OPENGL转换。事实上,在从场景物体位置转化成设备坐标系位置,最后物体显示在屏幕上的过程中存在四种坐标系建模坐标系MODELINGCOORDINATE,世界坐标系WORLDCOORDINATE,规范化设备坐标系NORMALIZEDDEVICECOORDINATE和设备坐标系DEVICECOORDINATE,它们之间的坐标变换如图31所示。MCWCNVCDC7图3

25、1坐标系变换312OPENGL坐标系方向OPENGL采用右手系坐标系统,即伸出右手沿正向方向弯曲手指,则定义的方向对应于拇指所指向的方向。如图32所示。图32右手法则313模型视图变换场景设计人员需要指定建模坐标系。OPENGL中默认的当前建模坐标系就是世界坐标系,且观察点位于世界坐标系原点,Z轴指向观察点,从观察点看去右边是X轴正向,上边是Y轴正向。若要修改之使其符合场景的需要,必须指定坐标系变换。在OPENGL以及绝大多数图形系统中坐标系变换是以矩阵的形式表示的,若要指定变换需将变换矩阵作为参数传递给OPENGL,即调用OPENGL模型视图变换。指定OPENGL模型视图变换有两种方法1直接

26、传递变换矩阵。2指定变换类型和变换参数。指定矩阵参数的API是GLMULTMATRIX将参数乘以当前模型视图变换矩阵和GLLOADMATRIX将参数指定为当前模型视图变换矩阵。该方法的优点是可以一次性指定多个变换的最后的变换结果。OPENGL模型视图变换对应于几何中三种仿射变换有平移,旋转和缩放三种变换API分别是GLTRANSLATE平移,GLROTATE旋转和GLSCALE缩放。该方法比传递表示一种变换的矩阵参数效率高而且直观。假设当前矩阵为单位矩阵,然后先乘以一个表示旋转的矩阵R,再乘以一个表示移动的矩阵T,最后得到的矩阵再乘上每一个顶点的坐标矩阵V。所以,经过变换得到的顶点坐标就是RT

27、V。由于矩阵乘法的结合率,RTVRTV,换句话说,实际上是先进行移动,然后进行旋转。即实际变换的顺序与代码中写的顺序是相反的。XYZ8所以,“先移动后旋转”和“先旋转后移动”得到的结果很可能不同。314提高绘图效率和场景的层次性在绘制具有多层建模层次的复杂场景时,会涉及很多模型视图矩阵操作,可利用OPENGL提供的矩阵堆栈来提升效率。矩阵堆栈适用于构建层次式的模型,也就是通过简单的模型构建复杂的模型。例如,假如绘制的是一辆有4个轮子的汽车,每个轮子用5颗螺钉固定到汽车上。由于所有的轮子都是相同的,所有的螺钉看上去也没什么区别,因此可以用一个函数绘制轮子,用另一个函数绘制螺钉,这两个函数在一个方

28、便的位置和方向绘制一个轮子或一颗螺钉,例如它们的中心在原点,并且它们的轴与Z轴对齐。当绘制这辆包括了轮子和螺钉的汽车时,需要4次调用画轮子的函数,每次都使用不同的变换,使每个轮子处于正确的位置。当绘制每个轮子时,需要5次调用画螺钉的函数,每次都要根据轮子进行适当的变换。假定只需要绘制车身和轮子,可以改用以下方法。绘制车身。记住自己的位置,并移动到右前轮的位置。绘制轮子,并丢弃上一次所进行的变换,使自己回到车身的原点位置。记住自己的位置,然后移动到左前轮。类似地,对于每个轮子,需要绘制轮子,记住自己的位置,然后连续地移动移动到绘制螺钉的每个位置,在画完每个螺钉之后丢弃上一次所进行的变换。由于变换

29、是以矩阵的形式存储的,因此矩阵堆栈提供了一种理想的机制,用来完成这种类型的连续的记忆,移动和丢弃操作。在OPENGL中模型视图矩阵的操作是矩阵堆栈最顶部的那个元素。GLPUSHMATRIX是压栈,GLPOPMATRIX是弹出。32投影一个场景要显示在屏幕上必须确定场景中的哪些物体是可见的,投影变换的一个目的就是定义一个可视空间。定义可视空间有两种用途。它决定了一个3D空间中的物体如何映射到屏幕上即通过使用透视投影或正投影,并且定义了哪些物体或物体的部分被裁剪于最终的图像之外。投影有透视投影和正投影两种类型。321透视投影透视投影最显著的特点是透视缩放FORESHORTENING物体距观察点越远

30、,它最终在屏幕上看上去就越小,比如在火车头内向前照一个铁轨的照片,两条铁轨似乎在远处相交了。这是因为透视投影的可视空间是一个金字塔的平截头体。位于可视空间之内的物体被投影到金字塔的顶点,也就是观察点位置。靠近观察点的物体看上去大一9些,因为和远处的物体相比,在平截头体的较大部分里,它们占据了相对较大的可视空间。这种投影方法常用于动画,视觉模拟以及其他要求某种程度的现实感的应用领域,因为它和日常生活中用眼睛观察事物的方式相同。G1FRUSTUM函数用于定义一个平截头体,它计算一个用于实现透视投影的矩阵,并把它与当前的投影矩阵一般为单位矩阵相乘。记住,可视空间用于裁剪那些位于它之外的物体。平截头体

31、的4个侧面,项面和底面对应于可视空间的6个裁剪平面,位于这些平面之外的物体或物体的部分将被裁剪掉,不会出现在最终的图像中。且G1FRUSTUM函数并不需要定义一个对称的可视空间。图33GLFRUSTUM创建透视投影平截头体在三维空间中有一个默认的方向,可以在投影矩阵上执行旋转或移动,来改变方向。但是,这种方法难度较大。GLFRUSTUM的使用不是很直观。因此,也可以用OPENGL工具库函数G1UPERSPECTIVE。这个函数创建一个可视空间,它与调用GLFRUSTUM所产生的可视空间相同,但可以用一种不同的方式来指定它。这个函数并不是指定近裁剪平面的角,而是指定Y方向上的视野的角度和纵横比X

32、/Y。对于正方形的屏幕,纵横比为10。这两个参数足以确定沿实现方向的未平截头体金字塔,还需要指定观察点和近侧及远侧裁剪平面的距离,也就是对这个金字塔进行截除。此外,G1UPERSPECTIVE仅限于创建沿视线方向同时在X轴和Y轴上对称的平截头体,这通常是所需要的。和GLFRUSTUM函数一样,可以执行旋转或移动,改变由GLUPERSPECTIVE所创建的可视空间的默认方向。如果没有这样的变换,观察点就位于原点,视线的方向沿Z轴的负方向。使用GLUPERSPECTIVE,需要挑选适当的视野值,否则图像看上去就会变形。为了获得完美的视野,可以推测自己的眼睛在正常情况下距离屏幕有多远以及窗口有多FR

33、USTUMBOTTOMLEFTRIGHTTOPNEARFAR10大,并根据距离和大小计算视野的角度。计算结果可能比想象的要小。也可以换一种方法考虑这个问题。一个35毫米的照相机如果要达到94度的视野,它的镜头就要求达到20毫米,这已经是非常宽的镜头了。图34GLUPERSPECTIVE创建透视投影322正投影正投影相当于在无限远处观察得到的结果,它只是一种理想状态。但对于计算机来说,使用正投影有可能获得更好的运行速度。在正投影下,可视空间是个平行的长方体。物体和照相机的距离并不影响它看上去的大小。这种类型的投影用于建筑蓝图和计算机辅助设计的应用程序。在这类应用程序中,当物体经过投影之后,会保持

34、它们的实际大小以及它们之间的角度。GL0RTHO函数创建一个正交平行的可视空间。和GLFRUSTUM一样,需要指定近侧裁剪平面的角和到远侧裁剪平面的距离。如果没有其他变换,投影的方向就与Z轴平行,观察点的方向直接朝向Z轴的负方向。图35G10RTHO创建正交投影观察点FRUMSTUMNEARFARHWASPECTW/H11323投影变换示例以下两图是图43在透视投影和正投影下的不同观察效果。图36正投影图37透视投影33窗口与视口窗口WINDOW世界坐标系中要显示的区域不是指屏幕窗口。视口VIEWPORT窗口映射到显示器上的区域。窗口定义了显示内容,而视口定义了显示位置和大小。在规范化坐标系N

35、VC下定义视口范围,变换到规范化的设备坐标系中。图38窗口视口变换关缩放S位移T的复合变换计算公式如下MINMAXMINMINMAXMINXWXWXWXWXVXVXVXVMINAXMINMAXXWXWXVXVSXMINMAXMINMINMAXMINYWYWYWYWYVYVYVYVMINMAXMINMAXYWYVYVSY若缩放系数SX和SY不相等,图形对象会产生变形。331视口变换视口变换类似于照相机冲洗相片大小这个阶段。在计算机图形中,视口是个矩形YWMAXYWMINWCXWMAXDC窗口视口XWMINXVMINXVMAXYVMAXYWMINXW,YWXV,YV12的窗口区域,图像就是在这个区

36、域中绘制。视口是用窗口坐标来测量的,后者反映了屏幕上的像素相对于窗口左下角的位置。所有的顶点都已经通过模型视图矩阵和投影矩阵进行了变换,那些位于可视空间之外的顶点均已被裁剪掉。在屏幕上打开窗口的任务是由窗口系统而不是OPENGL负责的。但是,在默认情况下,视口被设置为打开窗口的整个像素矩阵。可以使用GLVIEWPORT函数选择一个更小的绘图区域。例如,可以对窗口进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。使用GLVIEWPORT来定义视口。332变换深度坐标深度Z坐标是在视口变换期进行编码的并在以后存储于深度缓冲区中。可以使用GLDEPTHRANGE函数,对Z值进行缩放,使他们

37、位于一个需要的范围之间。在透视投影中,变换后的深度坐标和X坐标及Y坐标一样也进行了透视除法除以W坐标。当变换后的深度坐标远离近侧平面时,它的位置就逐渐变得不太精确。34几何图元的绘制无论多么复杂的模型都要分解成点,线,面这些图元,再将所有这些模型的图元信息传递给OPENGL,OPENGL根据这些信息来绘制图形的几何形状。几何学中的点、直线和多边形的概念与在计算机中的点、直线和多边形会有所不同。数学上的点,只有位置,没有大小。但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点。另一方面,无论图形输出设备例如,显示器如何精确,始终不能输出一个无穷小的点。一般情况下,OPENGL中的点将

38、被画成单个的像素,虽然它可能足够小,但并不会是无穷小。同一像素上,OPENGL可以绘制许多坐标只有稍微不同的点,但该像素的具体颜色将取决于OPENGL的实现。同样的,数学上的直线没有宽度,但OPENGL的直线则是有宽度的。同时,OPENGL的直线必须是有限长度,而不是像数学概念那样是无限的。可以认为,OPENGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。多边形是由多条线段首尾相连而形成的闭合区域。OPENGL规定,一个多边形必须是一个“凸多边形”。通过点、直线和多边形,就可以组合成各种几何图形。要OPENGL按照用户的设计绘制物体,除了必须向OPENGL传递顶点信息外,还必

39、须将这些顶点的组合方式传递给OPENGL。即需要把一组顶点放在一对GLBEGIN和GLEND之间,传递给GLBEGIN的参数决定了由这些顶点所构建的几何图元的类型。例如,同样指定了五个点,所传递的图元类型参数不同,将绘制不同的图元。13GL_POLYGONGL_POINT图39多边形或者一组点341点OPENGL是基于点的,也就是说在OPENGL中,所有的几何物体最终都被描述成一组有序的顶点。可以使用GLVERTEX函数来指定顶点。点可以用一组称为顶点的浮点数来表示。所有的内部计算都是建立在把顶点看成是三维的基础之上的。用户可以把顶点指定为二维的形式也就是说,只有X和Y坐标,并由OPENGL为

40、它赋一个值为0的Z坐标。342直线在OPENGL中,直线这个术语表示一段线段,而不是数学意义上在两边无限延伸的直线。指定一些列彼此相连接的线段,甚至是闭合的线段都是非常容易的。但是不管在哪种情况下,组成连线系列的直线都是根据它们的终点位置的顶点指定的。343多边形多边形是由单闭合的线段循环包围的区域,其中线段是由它们的终点位置的顶点所指定的。一般情况下,多边形是通过填充它内部的像素绘制而成的。但是,也可以仅仅绘制多边形的外框,甚至把它画成一系列的点的形式。在一般情况下,多边形有可能非常复杂。因此OPENGL在基本多边形的构成方面施加了很强的限制。首先,在OPENGL中,多边形的边不能相交按照数

41、学上的术语,满足这种条件的多边形称为简单多边形。其次,OPENGL的多边形必须是凸多边形,也就是不存在内陷的部分。准确的描述是在一个多边形的内部任意取两个点,如果连接这两个点的线段都在这个多边形的内部,那么这个多边形就是凸多边形。但是,OPENGL并不限制构成凸多边形的边界线段的数量。另外,OPENGL无法描述中间有洞的多边形,因为它们是非凸的,并且无法由一个闭合的线段循环所构成的边界来绘制。如果用OPENGL描述一个非凸的填充多边形,其结果是不确定的。例如,在大多数系统中,不大于多边形凸包的地方将被填充。但在有些系统中,小于凸包的地方将被填充。14图310有效和无效的多边形OPENGL在合法

42、多边形的构成方面施加这些限制的原因是这些限制有利于提供快速的多边形渲染硬件来渲染符合条件的多边形。简单多边形的渲染速度非常快,而那些困难的情况就难以快速检测。因此,为了最大限度地提高性能,OPENGL只得做出取舍,假定所有的多边形都是简单多边形。现实世界的许多表面是由简单多边形,非凸多边形或有洞的多边形组成的。由于所有这类多边形都可以由简单多边形组合而成,因此复杂的几何图形描述对多边形进行分格化,把它们分解成许多可以进行渲染的简单多边形。由于OPENGL的顶点总是三维的,因此形成特定多边形边界的点不必位于空间中的同一个平面上当然,在许多情况下,它们确实位于同一个平面上。例如,当多边形的所有顶点

43、的Z坐标都是0的时候,或者当多边形是个三角形的时候。如果一个多边形的所有顶点并不位于同一个平面上,那么它在空间中经过各种不同的旋转,并改变视点和现实屏幕上的投影之后,这些点可能不再构成一个简单的凸多边形。例如,想象一个由4个点组成的四边形,它的4个点都稍稍偏离原平面。如果从侧面看过去,将看到一个像蝴蝶结一样的非简单多边形,这种多边形无法保证能够进行正确的渲染。当利用真实表面上的点所组成的四边形来模拟弯曲表面时,这种情况常常出现。为了避免这个问题,可以使用三角形来模拟表面,因为任何三角形都保证位于一个平面上。344矩形由于矩形在图形应用程序中极为常见OPENGL提供了填充矩形图元函数GLRECT

44、。绘制矩形的方法类似于绘制多边形。但是使用的特定OPENGL实现可能会对用于绘制矩形的GLRECT函数进行优化。另外,尽管矩形在三维空间中有一个初始的特定方向在XY平面,并且与坐标轴平行,但是可以通过旋转或其他变换对矩形的方向进行更改。345曲线和表面所有的光滑曲线或表面都可以进行模拟,并且可以到任意高的精度,其方法就是组合大量的短直线或小多边形。因此,只要对曲线或表面进行足够的细分,并用直线段和平面多边形来近似地模拟它们,它们看上去就像是真的弯曲一样。尽管曲线并不是几何图元,但OPENGL还是提供了一些直接的支持,对它们进行细分和绘制。有效的无效的15图311近似曲线第四章三维图像显示的实现

45、及分析上一章对OPENGL的基本理论做了详细的介绍,接下来以卫星与深空三维场景的实时仿真技术,具体的介绍一下OPENGL在实现三维图像的生成及显示的原理和实现过程。41概要设计因为OPENGL与VC是通过接口程序相连的,所以在实现三维图形的生成及显示时,需要一个应用程序入口;然后要注册窗口类,注册完成后需要创建OPENGL显示窗口;之后便可以进行三维图形的绘制;绘制完成后销毁窗口、注册窗口,整个过程便结束。程序的具体实现框架如图41所示。1641程序流程图应用实例的实现包括以下几个步骤程序初始化,形体建模,色彩渲染,应用动画。图42工程实现流程图42WINDOWS操作系统下OPENGL应用程序

46、初始化421应用程序依赖库在WINDOWS操作系统下,OPENGL应用程序所调用的指令集被封装在OPENGL32DLL和GLU32DLL这两个动态链接库中。同时,这两个函数库也是OPENGL标准的组成部分。其中,OPENGL32DLL提供OPENGL核心功能;GLU32DLL是实用函数库,提供了一些较高级的建模特性,例如二次曲面以及NURBS曲线和平面。另外,GLUT库是OPENGL实用工具包,它是独立于子窗口系统的工具包,目的是隐藏不同窗口系统API的复杂性。但该库只封装了最基础的窗口API,功能比较有限,一般只是用于OPENGL教学演示。表4LOPENGL程序集LIBRARYOPENGL3

47、2LIBGLU32LIBGLUT32LIBDLLOPENGL32DLLGLU32DLLGLUT32DLL在利用OPENGL开发工具编制应用程序之前,首先应进行OPENGL的头文件与函数库文件的包含,即在WORKSPACEWINDOWS中单击FILE文件标签,打开SOURCEFILES,程序初始化形体建模渲染色彩动画的应用是否开始创建OPENGL显示CREATEWINDOWGL注册窗口类REGISTERWINDOWCALS初始化OPENGL绘制程序INITIALIZE循环更新显示并等待消息消息是否退出退出前的扫尾工作DEINITIALIZE销毁窗口DESTROYWINDOWGL注销窗口UNREG

48、ISTERWINMAIN应用程序入口返回0结束17双击STEPINGLVIEWH以打开此文件。在文件首部添加头文件INCLUDE“GLGLH”INCLUDE“GLGLUH”然后打开菜单PROJECTSETTINGS,在弹出的对话框中选择LINK标签,在OBJECTLIBRARYMODULES栏中增加OPENGL32LIB及GLU32LIB两个文件。接下来再极小化OPENGL。422像素格式在WINDOWS操作系统上,应用程序要进行三维图形的绘制输出是使用所谓的设备描述表DEVICECONTEXT,但OPENGL并不使用设备描述表,它使用渲染描述表RENDERINGCONTEXT完成图形图像的映

49、射。渲染描述表的映射核心是像素格式的设置。OPENGL进行绘图操作时,实际上是在进行设备像素的操作。OPENGL将数据转化为像素操作写入帧缓存中,OPENGL需要知道WINDOWS的像素格式,或者说需要与其一致起来。在初始化OPENGL时,初始化函数需要一种叫做PIXELFORMATDESCRIPTOR的结构,来完成对像素属性的设置,包括缓存设置、颜色模式、颜色位数、深度缓存位数等。一般地,OPENGL需要通过PIXELFORMATDESCRIPTOR结构指定自己的像素格式,该结构定义如下TYPEDEFSTRUCTTAGPIXELFORMATDESCRIPTOR像素格式的设置是通过成员函数BSETUPPIXELFORMAT来实现的。423渲染描述表如WINDOWS程序的设备描述表一样,OPENGL渲染描述表保存着在窗口中用来渲染一个场景所需的信息。渲染描述表简称RC,一个OPENGL应用程序必须有一个渲染描述表,并且在进行OPENGL绘制之前它应该是当前的。实际上,渲染描述表是OPENGL输出与WINDOWS设备描述表联系的机制,在渲染描述表存入信息后,OPENGL就可以在WINDOWS系统中更新一个窗口的图形状态。渲染描述表是线程安全的,也就是说多个线程可以同时使用一个渲染描述表。在某一时刻一个线程只使用一个渲染

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。