为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

OpenGL的虚拟校园漫游系统

2018-01-06 24页 doc 115KB 38阅读

用户头像

is_003124

暂无简介

举报
OpenGL的虚拟校园漫游系统OpenGL的虚拟校园漫游系统 毕业论文 题 目基于OpenGL的虚拟校园漫游系统 学 院 物理与信息科学学院 姓 名 蒙安泰 专 业 计算机科学与技术 学 号 251030120 指导教师 刘春明 提交日 2009年5月19日 原创性声明 本人郑重声明:本人所呈交的论文是在指导教师的指导下独立进行研究所取得的成果。学位论文中凡是引用他人已经发表或未经发表的成 果、数据、观点等均已明确注明出处。除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。 本声明的法律责任由本人承担。 ...
OpenGL的虚拟校园漫游系统
OpenGL的虚拟校园漫游系统 毕业论文 目基于OpenGL的虚拟校园漫游系统 学 院 物理与信息科学学院 姓 名 蒙安泰 专 业 计算机科学与技术 学 号 251030120 指导教师 刘春明 提交日 2009年5月19日 原创性声明 本人郑重声明:本人所呈交的论文是在指导教师的指导下独立进行研究所取得的成果。学位论文中凡是引用他人已经发表或未经发表的成 果、数据、观点等均已明确注明出处。除文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。 本声明的法律责任由本人承担。 论文作者签名: 年 月 日 论文指导教师签名: 【摘 要】随着计算机图形学技术、可视化技术及多媒体技术的发展,人们充 分发挥创造性思维,使用计算机精确地再现现实世界中的绚丽多彩的三维物体, 三维图形在人们周围无所不在。通过人机交互来模拟和再现现实世界,其核心 技术就是当今最为时髦的VR(Virtual Reality,虚拟现实)技术,而作为其 分支之一的虚拟漫游技术被广泛应用于建筑、旅游、广告影视等领域,取得了 良好的社会效益,本文介绍了虚拟漫游技术产生的背景及其现状,并对实现虚 拟漫游的技术难点和关键手段作了详细的分析和研究,提出了系统#设计#, 明确了本课题实现的功能和目标。 【关键词】 OpenGL 虚拟校园 三维建模 [Abstract] With the computer graphics technology, visualization technology and multimedia technology, the people give full play to creative thinking, the use of computer accurately reproduce the real world of the colorful three-dimensional objects, three-dimensional graphics at the people around everywhere. Through human-computer interaction to simulate and reproduce the real world, its core technology is the most fashionable of today's VR (Virtual Reality, Virtual Reality) technology, as one of its branches virtual roaming technology is widely used in construction, tourism, advertising film and television, etc. areas, and achieved good social benefits, this paper introduces the technology of virtual roaming the background and the status quo, and the realization of the virtual roaming the key means of technical problems and made a detailed analysis and research design of the system, clear the subject to achieve the functions and objectives. [Keywords] OpenGL Virtual Campus three-dimensional modeling I 目录 第一章 虚拟现实技术 ........................................................................................... 1 1.1 虚拟现实技术产生背景 .............................................................................. 1 1.2 虚拟漫游技术现状 ..................................................................................... 1 1.3 虚拟漫游技术发展前景 .............................................................................. 2 1.4 课题研究的启发 ......................................................................................... 2 第二章 OpenGL简介 ............................................................................................ 3 2.1 OpenGL基本功能 ....................................................................................... 3 2.2 OpenGI 工作流程 ....................................................................................... 4 第三章 解决方案和研究手段 ................................................................................ 5 3.1 建模技术 ..................................................................................................... 5 3.2 实时绘制方法 ............................................................................................. 6 3.3 渲染工具的选择 ......................................................................................... 6 第四章 系统的设计与实现.................................................................................... 7 4.1 系统需求分析 ............................................................................................. 7 4.2 系统功能 ..................................................................................................... 7 4.3 系统实现关键技术 ..................................................................................... 7 4.3.1 三维建模 ......................................................................................... 7 4.3.2 VC,,读取3DS文件 ...................................................................... 7 4.3.3 人机交互的实现 .............................................................................. 8 4.3.4 碰撞检测 ....................................................................................... 10 4.4 系统的开发过程 ..................................................................................... 12 结论 ........................................................................................................................ 15 参考文献 ................................................................................................................ 16 致谢 ........................................................................................................................ 17 II 第一章 虚拟现实技术 1.1 虚拟现实技术产生背景 目前,计算机图形学已经进入三维图形时代,正向着科学计算可视化、真实感图形和虚拟现实三大方向快速发展。自计算机发明以来,在传统的信息处理环境中一直是以计算机为主体的。例如在传统的仿真和建模环境中,虽然主观上一直在强调要发挥人的主观作用,但由于在客观上计算机只能在处理数字化的信息时才能发挥出强大的威力,而人不得不去配合当时计算机所能提供的技术条件,因此人和计算机的关系是不甚和谐的。为了使计算机从只能处理数字化的单维信息转化为可以处理人所能感受到的、在思维过程中所能接触到的、除数字化信息之外的其他表现形式的多维信息,人们在20世纪末提出了“虚拟现实”的概念。 近年来,虚拟现实不仅是信息领域科技工作者和产业界研究、开发和应用的热点,而且也是多种媒体竞相报道的热点,其目标是要创建一个由多维信息构成的和谐人机交互环境。 1.2 虚拟漫游技术现状 虚拟现实技术是一门崭新的综合性信息技术,它融合了数字图像处理、计算机图形学、多媒体技术、传感器技术等多个信息技术分支,从而大大推进了计算机技术的发展。虚拟现实是多媒体技术发展的更高境界,是这些技术高层次的集成和渗透,给人们以更加逼真的体验,为人类观察、探索事物的运动变化规律提供了极大的便利条件。目前,新兴的虚拟现实技术已广泛应用到科学、技术、工程、医学、文化、娱乐的各个领域,引起许多行业的技术变革。 在虚拟漫游技术中,最重要的一部分内容就是三维图形编程。当前,在三维图形编程工具中最为突出的是SGI公司在1992年开发的OpenGL(Open Graphics Library,开放式图形库)。 OpenGL是近几年发展起来的一个性能卓越的三维图形,它是在 SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。OpenGL既是专业的3D程序接口,也是一个功能强大,调用方便的底层3D图形库。它由几百个指令或函数组成,由于这 1 些函数独立于窗口操作系统和硬件环境 ,因而使用户从具体的硬件和操作系统中解放出来 ,即只要在写程序的过程中按照的格式就可在支持该语言的硬件环境下运行。同时由于OpenGL是网络透明的,所以可以在网络环境下以客户,服务器(C,S)模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。它提供了建模 、变换、颜色模式设置、光照与材质设置、纹理映射、双缓存动画等多种基本功能。 OpenGL作为一个性能优越的图形应用程序设计界面(API)而适合 于:广泛的计算环境,从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。随着 OpenGL的进一步发展,它在虚拟现实技术、医学影像、游戏制作 、建筑设计、电影后期制作等领域有着更广阔的发展前景。 1.3 虚拟漫游技术发展前景 自20世纪末提出虚拟现实技术以来,虚拟漫游技术已经经历了近二十年的发展历程,在近几年更是得到了飞跃性的发展。但是由于编程人员缺乏经验,编程技术熟练程度不够,虚拟漫游技术还有很大的发展空间。接触过三维游戏的人可以发现,虚拟的场景并不如现实环境那样生动逼真,比如人的头发以及树林草丛常常十分模糊。在虚拟的仿真场景中漫游时,碍于编程技术的限制,不能像在现实环境中那样随心所欲。可以说,现在的虚拟场景漫游,距离人们想象中的不受任何限制地四处游览,还有一定的距离,但是不可否认,新型的虚拟漫游技术,使人们实现了饱览虚拟现实中绚丽风景的美好愿望,享受短暂而又神奇的三维空间漫游的乐趣。可以预想,随着芯片技术和运算速度的快速发展,尤其是三维图形技术和编程技术的发展,在不久的将来,虚拟漫游将会更加生动逼真,更加栩栩如生。 1.4 课题研究的启发 随着虚拟现实技术在各领域的应用日益广泛,以浏览和查询功能为主的学校环境漫游系统已经渗入到虚拟校园中。虚拟运动场漫游系统就是在这种应用背景下提出的。 OpenGL不仅是三维图形加速卡硬件和三维图形应用程序之间一座非常重要的沟通桥梁,同时也为地理信息系统的开发技术向三维地理信息系统以及虚拟现实技术的过渡提供了可靠的图形保障。由OpenGL语言编程实现的虚拟漫游系 2 统优越于一般的三维软件所制作的三维系统,它的优越性在于其超强的绘图性能和可靠性,此外,它还具备强大的人机交互能力,用户通过操作键盘、鼠标等输入设备,能够实现高质量、高性能的虚拟场景漫游。鉴于OpenGL实时交互能力强、图形函数调用简便、建模功能强大等特点,系统基于OpenGL来实现虚拟运动场的漫游。 第二章 OpenGL简介 2.1 OpenGL基本功能 由于微软在Windows中包含了OpenGL,所以OpenGL可以与Visual C++紧密接合,简单快捷地实现有关计算和图形算法,并保证算法的正确性和可靠性。简单地说,OpenGL具有建模、变换、色彩处理、光线处理、纹理影射、图像处理、动画及物体运动模糊等功能: 1)建模 OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体,如球、锥、多面体、茶壶以及复杂曲线和曲面(例如Bezier、Nurbs等曲线或曲面)的绘制函数。 2)变换 OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比、镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。 3)颜色模式设置 OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。 4)光照和材质设置 OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。客观世界中的物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。 5)纹理映射(Texture Mapping) 利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。 6)位图显示和图象增强 3 OpenGL的图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效果。 7)双缓存动画(Double Buffering) OpenGL使用了前台缓存和后台缓存交替显示场景(Scene)技术,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 8)特殊效果 利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。运动模糊的绘图方式(motion-blured),模拟物体运动时人眼观察所感觉的动感现象。深度域效果(depth-of-effects),类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。 这些三维物体绘图和特殊效果处理方式,说明OpenGL能够模拟比较复杂的三维物体或自然景观。 2.2 OpenGI 工作流程 OpenGI 工作流程如图,1: 图表 1 根据这个流程,我们可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤: 1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把点、线、多边形、图像和位图都作为基本图形单元)。 2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。 3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确 4 定光照条件、纹理粘贴方式等。 4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization)。 在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对像素数据进行操作。 第三章 解决方案和研究手段 OpenGL是一种独立于硬件、窗口系统和操作系统的API,由于它具有高性能的交互式三维图形建模能力和易于编程开发等特点,已经成为一种三维图形开发标准,是从事三维图形开发工作的主流工具。而Visual C++在编程语言中历来是以王者著称的,由于它基础类库丰富、接口函数灵活多样,已尽被广泛应用在各个工程技术领域。微软在Visual C++6.0中提供了三个OpenGL函数库,分别是glu32.lib、glaux.lib和OpenGL32.lib,利用这些函数库中的OpenGL API函数,可以方便的实现三维图形的建模、渲染和图形变换。OpenGL与Visual C++紧密结合,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性。在本系统中拟定采用OpenGL与Visual C++语言来实现虚拟运动场的漫游。从技术角度来说,实现虚拟漫游的最大难点在于建模和实时渲染。 3.1 建模技术 虚拟场景漫游,首先要解决视景建模问题。目前,虚拟环境建模的方法主要有以下两种:其一是采用虚拟现实建模语言来完成建模,也可以直接利用OpenGL建立模型库或开发专门的建模工具,但这样做的工作量是非常大的,一般用于较大型的虚拟视景仿真系统;其二是用AutoCAD、3D Studio Max等普通建模工具建立起三维模型,然后通过编程或借助于工具将模型进行渲染。由于场景漫游所看到的景象离人们很近,需要绘得十分逼真。为了在保证建模质量的情况下减少工作量,采用第二种方法。AutoCAD是美国的AutoDesk公司研制开发的一个优秀的绘图软件,主要用于二维图的设计,虽然也可进行三维图形的绘制,但制作三维立体模型仍然比较困难。3D StudioMax是AutoDesk公司开发的一个专门的三维制作软件,其功能十分强大,不仅能方便地进行各种三维造型的制作,还包括丰富的材质贴图,同时能够方便地进行动画制作,是一种方便的 5 三维建模软件。故采用3D Studio Max对运动场视景进行建模。 3.2 实时绘制方法 虚拟场景漫游必须具有实时性,否则效果会很差。常见的真实感较强的图像实时绘制的方法也有两种: 一种是光照跟踪算法。光线跟踪的整体光照模型成功地模拟了光在光滑景物表面之间的反射和折射过程,随着视点的转移,要求实时地计算出此状态下模型各点的光照、纹理等信息,并实时地绘制出。由于光线跟踪技术是建立在空间点采样的基础之上,采样光线的数目常受到很大的限制,这使许多光照效果得不到正确的表现。同时,由于要实时地计算各点的光照、纹理等信息,对机器的硬件要求较高,一般要配OpenGL加速卡,还需要较慢速的光照处理算法。 第二种方法是辐射度算法,即把组成环境的曲面作为一个封闭的系统,并假设封闭系统中的曲面均为漫反射面,然后根据能量平衡原理计算出每一曲面的能量,从而求出被观察点的光亮度,然后迅速地显示该场景中的不同观察角度的真实感视图。由于考虑了封闭系统各曲面之间的能量传递,因而能够从整体上正确计算出环境中的光能分布,而不需要在漫游时许多光照的计算量,从而大大减少了漫游时的计算量。这种方法比较适合硬件条件一般,而又想实现较为逼真的场景漫游程序。因此,我们采用第二种方法,即先用辐射度方法对场景进行预处理,在漫游时只需根据事先计算出的能量值进行绘制即可,从而可以在观察角度发生变化是迅速地生成场景的真实感视图。 3.3 渲染工具的选择 当前最常用两种渲染工具是OpenGL和DirectX,其中DirectX是微软近年来针对三维游戏编程提出的,它可以利用其开发包DirectX SDK中提供的工具直接导入3DS文件,然后用Direct 3D完成渲染,但其许多功能都比不上OpenGL。OpenGL被认为是高性能图形和交互式视景处理的标准。目前被包括微软在内的许多著名公司采用。OpenGL提供直观的编程环境、用户应用程序和操作系统的接口以及一系列图形变换函数、外部设备访问函数和三维图形单元,可以用这些函数进行三维实时交互。它还提供了多种对三维物体的绘制方式,如现况、深度、反走样、平面明暗处理、加阴影和纹理等。这样可以方便地应用这个图形库,创建出接近光线跟踪的高质量静止或动画的三维彩色图像。而Visual 6 C++6.0采用的是面向对象的MFC编程,它提供了与OpenGL的接口,能很方便地进行OpenGL编程,从而构建良好的虚拟场景漫游程序。 OpenGL在三维图形的开发及虚拟现实等方面有着广泛的应用前景,系统在基于OpenGL的基础上,利用3D Studio Max进行三维建模,通过Visual C++实现了人机交互等功能,大大的缩短了开发时间,提高了开发效率,能实现界面良好、操作简便的虚拟场景漫游。 第四章 系统的设计与实现 4.1 系统需求分析 虚拟校园系统以大学校园为研究区,使用对象定位为外界浏览人员和本校师生,本系统在综合考虑学校管理与规划所需要的各种信息的前提下,为方便浏览学校整体面貌而设计开发的, 系统提供多种交互手段,用户和系统的交互主要通过键盘进行。 4.2 系统功能 手动漫游——用户可以通过键盘对校园内感兴趣的地方进行漫游,通过键盘控制漫游的方向,同时按 Ctrl键可实现漫游的加速。 4.3 系统实现关键技术 4.3.1 三维建模 3D Studio是一套用于制作三维动画的应用软件,其三维建模功能十分强大,并且生成的 3DS文件是一种非常普遍的数据格式,用它建模不仅大大缩短建模时间而且提高建模效率,但需利用 OpenGL编写相关程序才能读取 3DS文件,把 3DS文件转换成 OpenG1 可以识别的文件,以便于实现对模型的控制。 4.3.2 VC,,读取3DS文件 转换的过程如下:首先将块的3DS格式的内容读入块结构中,然后依次将3DS文件中定义的颜色、模型的顶点、多边形、对象所用的材质、对象数据等读入,用以获得当前的物体。也可以通过转换工具将模型转换OpenGL格式的文件,如View3DS是把3D Studio Max制作的3DS格式的三维模型转换成OpenGL格式的较好的软件,还可以通过OpenGL以及虚拟现实建模语言进行三维建模。 下面介绍转换的过程(鉴于篇幅原因,仅附带部分代码): 7 1)将块的3DS格式的内容读入块结构中 int C3dsReader::Read3DSChunk(F1LE fp,Chunk3DS&chunk) 读入字符串,如果字符串的长度大于缓冲区,则截去多余的部分 2)读入3DS文件中定义的颜色 int C3 LJsReader::ReadC0l0r(FII E fp,float&red,float&green,float&blue) 3)读入3DS文件 中模型的顶点 int c3dsRead :ReadP0intArray(CTriObject IICWChild,long fileSize,FILE fp) 4)读入3DS文件中多边形文件 int c3dsReader::ReadFa(!eArray(CTriOUect ncwchild,long unsigned fileSize,FILE*fp) 5)读入 3DS对象所用的材质 int C3dsReader::ReadMeshMatGroup(CTriObject newchild,MaterialDict*) 6)读入 3DS文件巾对象数据 Int C3dsReaLIe ReadT 0bject(MaterialDict matdict,hmg fileSize,FILE fp,long triStart,long triSize,char groupName) 7)读入3DS文件 int C3dsReade Read3DSFile(10ng fileSize,long fileStart,long fileLen,FILE fp) 8)获得当前的物体 4.3.3 人机交互的实现 OpenGL编程实现的系统优越于一般的三维软件所制作的三维系统 ,该系统的优越性在于其强大的人机交互能力,用户通过操作键盘、鼠标等输入设备,能够实现虚拟漫游,对于同一地物而言,用户可从不同的角度观察地物 。本系统对场景的漫游通过方向键结合其他按键来实现场景漫游。在实现场景漫游时可以通过设置视点以及观察方向来实现,具体的函数为OpenGL语言中辅助函数库中的gluLookat(),通过设置相应的参数实现场景的漫游效果。 8 视图变换函数gluLookAt(),在扫描全景时非常有用,可以只移动视点来实现对全景的扫描,其三组参数分别指定了相机的位置、瞄准方向的参考点和相机向上方向。 通常视点变换操作在模型变换操作之前发出,以便模型变换先对物体发生作用。这样,场景中物体的顶点经过模型转换后就能达到所希望的位置,然后再对场景进行视点定位等操作。模型变换和视点变换共同构成模型视景矩阵。 gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)函数说明: , 改变前三个参数的值可以模拟人在实际环境中的移动。 , 改变中间三个参数的值,可以模拟人眼的转动,即所观察场景的变化。 , 后三个参数的值比较特殊,它所制定的不是一个点,而是一个方向, 即决定将哪一个坐标轴作为向上的方向,如果向上方向与观察点到中 心点的方向一致,结果将是不确定的。 在漫游中我们采用视点移动的方法,通过视点移动改变视点位置和视线方向来实现屏幕视野范围内的景物变化。本文定义EyeX、EyeY、EyeZ表示视点位置,LookX、LookY、LookZ表示视线的方向向量。upX、upY、upZ表示向上的向量,我们通过函数gluLookAt()来设置绘制过程中的视点及视线。 gluLookAt(EyeX,EyeY,EyeZ,EyeX+LookX,EyeY+LookY,EyeZ+LookZ,upX,upY,up Z) 由于OpenGL坐标特性,其Z轴表示垂直屏幕的方向,所以进行前后移动时我们分别在EyeX和EyeZ上加上不同的分量,从而改变视点位置。该分量是与视线向量的方向相关的。则新视点的位置通过下面的语句产生,其中speed表示每次按键产生的移动量,minEyeX,maxEyeX表示视点的移动范围。当speed取负值时得到相反方向的移动效果。 newEyeX = EyeX + LookX * speed newEyeZ = EyeZ + LookZ * speed If newEyeX < maxEyeX And newEyeX > minEyeX Then EyeX = newEyeX If newEyeZ < maxEyeZ And newEyeZ > minEyeZ Then EyeZ = newEyeZ 当进行水平旋转时(在XZ面内的旋转),我们通过给出旋转角度,计算旋转之后视线的方向向量。RotateAngle表示旋转角度。由于旋转过程中改变了 9 视线方向向量,也就是说我们了旋转角度的累积量,所以每次的旋转只需 计算当前的旋转量即可。同样RotateAngle取负值时得到相反的旋转效果。 LookX = LookX * Cos(RotateAngle) + LookZ * Sin(RotateAngle) LookZ = LookZ * Cos(RotateAngle) - LookX * Sin(RotateAngle) temp = 1 / Sqr(LookX * LookX + LookZ * LookZ) LookX = LookX * temp LookZ = LookZ * temp 俯仰旋转时我们只需要在Y轴方向上改变视线方向即可实现。 LookY = LookY + MoveY 左右移动过程中产生的改变量与视线方向在水平面上的投影方向有关。 newEyeX = EyeX + speed * (LookZ / (Sqr(LookX * LookX + LookZ * LookZ))) newEyeZ = EyeZ - speed * (LookX / (Sqr(LookX * LookX + LookZ * LookZ))) If newEyeX < maxEyeX And newEyeX > minEyeX Then EyeX = newEyeX If newEyeZ < maxEyeZ And newEyeZ > minEyeZ Then EyeZ = newEyeZ 4.3.4 碰撞检测 实现虚拟运动场的漫游时进行碰撞检测是十分必要的,在本系统中拟采用包 围盒技术,包围盒的各线段与坐标轴平行,最大好处是可以实现快速碰撞检测, 特别是在证明两个物体并不相交时是非常有效的。 在虚拟环境中,由于用户的交互和物体的运动,此时为保持环境的真实性, 需要及时检测到这些碰撞,并计算相应的碰撞反应,更新绘制结果,否则物体 会发生穿透现象,破坏虚拟环境的真实感和用户的沉浸感 在碰撞检测中,第一 是检测到碰撞的位置;第二是计算碰撞后的反应。考虑碰撞检测方法以及虚拟 漫游测的特殊要求本漫游引擎中采用基于视点向前线段探测的碰撞检测方法, 如图,2所示: 10 图表 2 1)设视点为V(在漫游系统中是虚拟人的头部位置); 2)取视线上沿运动方向距离为d的点M这是因为某一时刻只有在虚拟人运动的方向才有可能产生碰撞; 3)连接V和M形成线段; 4)计算求得与线段V2L4相交的物体,若其不与任何物体相交,则判断为无碰撞;若线段与多个物体相交,则存在多个交点(此时求得与视点最近的交点C1即为碰撞检测点,这个最短距离就是碰撞距离(为了找到碰撞点,最核心的运算是求交(由于在漫游系统中,各种实体模型都是由多边形组成的,所以线段和物体之间的求交运算,可以从2个方面考虑:第一,线段与长方体相交;第二,线段与多边形相交;但是,当视点与物体的距离大大超过线段的长度时,只需判断出它们不可能相交,而不必求它们的交点(因此,系统只对视点与物体包围盒的相交进行运算,以减少不必要的求交运算(一旦发生了视点与虚拟物体之间的碰撞,输入设备给出的前进或后退的指令将立刻被忽略,这是在漫游引擎中给出的简单碰撞响应( 在现实中,并不是所有的面都会阻挡漫游者的前进,例如,楼梯的竖面和平缓的山坡斜面,这些面在碰撞检测中都可以检测到,但是在现实生活中这样的面不会阻挡人的前进(因此,当碰撞到这种面时,系统应该能做出正确判断和适当处理,让视点能继续前进(采用的方法是,在漫游系统中给这样的实体设 11 置一个共同的属性,如果与这些实体碰撞时,则对它们进行特殊处理。 4.4 系统的开发过程 系统框图如图,3所示: 图表 3 下面结合校园三维可视化系统的开发过程具体讲述利用可视化编程语言Visual C++结合 OpenGL开发三维可视化系统的过程: 1)设置像素格式 OpenGL的像素格式告诉系统在利用 OpenGL绘制图形时所采用的颜色模式、颜色的位数。要设置像素格式首先填充 PIXELFPRMATDESCRIPT0R结构 ,代码如下: int pixelformat; if((pixelformat=ChoosePixelFormat(m_pDC->GetSafeHdc0,&pfd))= =0) { MessageBox(“Choose Pixel Format failed”); return FALSE; 12 } if(SetPixelFormat(m_pDC->GetSafeHde(),pixelformat,&pfd)= =FALSE) { MessageBox(“Set Pixel Format failed ”); return FALSE: } retum rRUE; 设置像素格式后对像素格式进行测试 。 2)创建着色描述表 (RC) 正如每一个 Windows应用程序都有一个设备描述表(DC)一样,着色描述表保存了与系统发生关系的重要信息。在程序开始时调用 GetDC获取 DC句柄,通过响应 Windows消息 WN_CREATE来创建当前化一个着色描述表。在关闭应用程序时调用视图类消息函数OnDestory()删除着色描述表。 3)创建用户界面 在Vc++环境下创建用户界面的步骤: , 使用 App Wizard创建视图类应用框架。 , 利用 Class View中添加成员函数:PreCreateWindow,OnCreate,OnSize 和OnDestroy。PreCreateWindow用于设置窗口属性 ,OnCreate用于没 置像素格式和创建绘制描述表,OnSize用于改变视窗大小,OnDestroy 用于删除绘制描述表 。 , 设置窗口属性,在PreCreateWindow函数中加入代码:CS.style | WS- _CLIPSIBLINGS | WS_CLIPCIIILDREN。 , 设置像素格式,创建绘制描述表RC , 绘制 OpenGL场景,所有的绘制工作都放在 DrawScene()函数中,然后 在 OnDraw函数中调用该函数,可以避免 OnDraw函数的内容过长。 , 释放绘制描述表 RC和 Windows设备描述表 DC。 4)模拟真实世界 , 定义光照与材质 光照与材质是生成真实感三维图形的基本要素。所得到的效果取决F光源的 13 属性(包括位置 、光强等)及物体的材质(包括物体的反射率、物体的颜色 等)。在 OpenGL中模拟光照时,先用生成光源的函数 gllight(),相应地, 下述语句定义光的属性,glLightfv(GL_LIGHT0,GL_AMBIENT, m_lightAmb)„„ 在实现光照效果时用函数 glEnable(GL_LIGtlTING), glEnable(GL_LIGHT0)来启动光照。物体材质的定义方法与光照的定义方法 较类似。 , 纹理贴图 纹理贴图就是利用数码相机将J听拍摄的实物照片作为所建立三维模型的 纹理“贴”至相应的二维物体模型,使模拟的地物更具有真实感。OpenGL 中的纹理贴图包括定义纹理贴图、控制纹理贴图、说明纹理贴图、定义纹理 坐标等步骤。所获的三维校园可视化的部分图形如图,4所示。 图表 4 , OpcnGI 变换 OpenGL中通过 多种几何变换 实现从二维平面向三维实体的转变,这些变换包括几何变换、投影变换 、剪切变换 、视口变换等。而投影变换中的平行投影和透视投影是 OpenGL中较常用的投影方式 。如透视投影使得远离观察点远的物体小,距离观察点近的物体大,从而使观察到的物体具有真实感,其操作命令为 void glFrustum(,1(0,1(0,一1(0,1(0,0(0,7(0),场景创建完后,通过多种变换,将所显示的地物置于视口范围内 。 14 结论 OpenGL在三维图形的开发及虚拟现实等方面有着广泛的应用前景 ,本文利用 3DMAX进行三维建模,通过校园内部漫游编程调用所得的三维数据模型,实现了人机交互等功能,大大的缩短了开发的效率,它不仅是 3D加速卡件和3D图形应用程序之间一座非常重要的沟通桥梁,同时也为地理信息系统的开发技术向三维地理信系统以_及虚拟现实技术的过渡提供了可靠的图形保障。此外,由于 OpenGL所开发的系统是网络透明的,下一步的工作是将开发的系统进一步完善,然后将三维校园可视化系统实现网络化的虚拟漫游系统。 15 参考文献 [1] 乔林,费广正,林杜,芦丽丹,马晓峰.OpenGL程序设计.北京:清华大学出版社, 2000 [2] 鲍虎军.虚拟现实技术概论[J].中国基础科学,2003.5(3):26~32 [3] 孙波.OpenGL编程实例学习教程.北京:北京大学出版社,2000 [4] 向世明.OpenGL编程与实例.北京:电子工业出版,1999 [5] 和平鸽工作室.OpenGL高级编程与可视化系统开发.高级编程篇(第二版).北京: 中国水利水电出版社,2005 [6] 李颖,薛海斌,朱伯立,朱仲立.OpenGL技术应用实例精粹.北京:国防工业出版 社,2001 [7] Samuel R.Buss著.唐龙等译.3D计算机图形学(OpenGL版).北京:清华大学出版 社,2006.10 [8] 薛惠锋,吴慧欣,解丹蕊.OpenGL图形程序开发实务.西安:西北工业大学出版社, 2005.6 [9] 郭兆荣,李菁,王彦.Visual C++ OpenGL应用程序开发.北京:人民邮电出版社, 2006 [10] 潇湘工作室.OpenGL超级宝典[M].北京:人民邮电出版社,2001 16 致谢 本研究及学位论文是在我的指导教师刘春明老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,刘老师都始终给予我们细心的指导和不懈的支持。从刚开始设计以来,刘老师就在学业上给予我们精心的指导,直到设计结束。在此谨向刘老师致以诚挚的谢意和崇高的敬意。 在此,我还要感谢和我一起完成毕业论文设计的刘勇刚、吉永珍、饶克克同学,正是由于他们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。特别感谢刘老师给我们提供了设计场所?107实验室,还要感谢实验室的管理员?蒲老师 ,在我们作设计的整个过程中他给了我们很大的帮助。在此 ,我谨以书面的方式向他们表示我忠心的感谢~ 17
/
本文档为【OpenGL的虚拟校园漫游系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索