OpenGL作为一种三维工具软件包
- 格式:doc
- 大小:624.00 KB
- 文档页数:35
SHANGHAI UNIVERSITY毕业设计(论文)UNDERGRADUATE PROJECT (THESIS)题目:基于OpenGL的机器人三维仿真环境设计学院: 机电工程与自动化学院专业: 机械工程及自动化学号:学生姓名:指导教师:起讫日期:目录摘要:-----------------------------------------------------------------------------------------------------1 ABSTRACT-------------------------------------------------------------------------------------------------1 1第一章绪论------------------------------------------------------------------------------------------4 2第二章基于OpenGL的三维仿真图形设计---------------------------------------------------8 3第三章仿人机器人的三维建模-----------------------------------------------------------------19 4第四章仿人机器人运动学仿真-----------------------------------------------------------------29 5第五章总结-----------------------------------------------------------------------------------------466 致谢---------------------------------------------------------------------------------------------------477 参考文献---------------------------------------------------------------------------------------------48基于OpenGL的机器人三维仿真环境设计摘要仿真技术是机器人研究领域中的一个重要部分,随着机器人研究的不断深入,机器人仿真系统作为机器人设计和研究过程中安全可靠灵活方便的工具,发挥着越来越重要的作用。
图形学和API| 图形学、 图 学 API和OpenGL | 学习API的方法y y正向学习 反向学习第二章 OpenGL编程| 2.1 | 2.2 | 2.3OpenGL简介 一个简单OpenGL程序例子 三维图形绘制2 1 OpenGL简介 2.1SGI 与 GL| SiliconGraphics (SGI) 通过硬件实现流水线体 过 件实 流水线体 系,改良了图形工作站 (1982) | 应用程序通过一个称为GL的库与系统通讯 | 借助于GL,可以非常简单地设计出三维交互图 形应用程序5OpenGL| GL的成功导致了 的成功导致 OpenGL的出现 的 (1992),这是 这一个与平台无关的API:yy y y y开放的三维图形软件包,它独立于窗口系统和操作系 统,以它为基础开发的应用程序可以十分方便地在各 种平台间移植 与Visual C++紧密接口,易于使用 与硬件非常贴近 从而可以充分发挥其功能 与硬件非常贴近,从而可以充分发挥其功能 着重在于渲染(rendering) 没有提供窗 和输入接 没有提供窗口和输入接口,从而避免依赖于具体的窗 从而避免依赖于具体的窗 口系统6OpenGL 库| OpenGL O GLy y y核心库 实用库 (GLU)Windows: OpenGL32 大多数unix/linux i /li 系统 GL 系统: 利用OpenGL O GL核心库提供一些功能,从而避免重复编 核心库提供 些功能 从而避免重复编 写代码 X window 系统:GLX Windows: WGL Macintosh:AGL7| OpenGL| 与窗口系统的连接y y yGLUT| OpenGLy|实用 实用工具库 库 (GLUT)提供所有窗口系统的共同功能打开窗口 | 从鼠标和键盘获取输入 | 菜单 | 时间驱动y代码可以在平台间移植,但是GLUT缺乏在特定平台 上优秀工具包所具有的功能|滚动条 /resources/libraries/glut/8y官方地址|软件组织应用程序OpenGL Motif widget or similarGLUT GLU GLGLX, AGL or WGLX, Win32, Mac O/S 图形软硬件9OpenGL 函数| 基本图元函数 基本图 数y点 Points, 线段 Line Segments, 多边形 Polygons等| 属性函数 | 视图函数 | 变换函数 | 输入函数(GLUT) | 控制函数(GLUT) | 查询函数10OpenGL 状态| OpenGL是一个状态机( 个状态机 state machine) | OpenGL 函数具有两种类型y生成基本形状如果形状可见,则得到输出 | 对顶点的处理和图元的表现由状态控制|y改变状态,或返回状态信息变换函数 | 属性函数|11面向对象方面的缺陷| OpenGL不是面向对象的,因此逻辑上的一 面向 象的 此 辑上的个函数却对应着多个OpenGL函数:glVertex3f glVertex2i glVertex3dv| 内在存储模式是相同的 式 | 容易在C++中创建重载函数,但效率却成为主要问题。
摘要随着时代进步,从简单的色块堆砌而成的画面到数百万多边形组成的精细人物,游戏正展示给我们越来越真实且广阔的世界。
对于近几年游戏的发展来说,老式2D游戏的画面、游戏性、互动性已经无法满足各类玩家的需要,而3D游戏无论是在游戏画面的真实程度、操作的流畅程度、以及故事背景方面的优越性都非常突出。
在这种发展趋势下,2D游戏所占领的市场将会变得微乎其微,3D游戏的开发将会成为整个游戏制作领域的一种趋势。
针对于3D游戏开发,OpenGL作为一个3D的应用程序编程接口(API)来说,是非常合适的。
OpengGL作为与硬件无关的软件接口,只要操作系统使用了OpengGL适配器就可以打到相同的效果。
它又是一个开放图形库,在跨平台领域上非常便利。
并且它具有优良的移植性,是广大3D游戏开发者的首选。
本论文为利用OpengGL进行3D射击游戏的设计与开发,采用碰撞检测、粒子系统、MD2模型绘制、3D声效等技术,最终实现一个射击游戏。
关键词:游戏, 基于OpengGL,三维, 射击游戏Abstract: Along with the progress of the times,fine characters from simple color swatch built the picture to the millions of polygons, the game is to show us more and more real and the wide world.For the development of the game in recent years, the old 2D games' screen ,games andinteractive have been unable to meet all kinds of game player needs, while 3D regardless of the game on the game screen reality, smooth operation, and the background of the story of the superiority is very prominent.In this trend, 2D game occupied market will become very little, the development of 3D games will become the game made a trend in the field.For 3D game development, OpenGL as the application programming interface of a 3D (API), is a very suitable. OpengGL as the interface of the software and hardware independence, as long as the operating system uses the OpengGL adapter can reach the same effect. It is also an open graphics library, cross-platform in areas very convenient. And it has good transplantation, is the 3D game developer's choice.In this paper, the design and development of 3D shooting game is to use OpengGL, the collision detection, particle system, MD2 model, 3D sound rendering technology, the ultimate realization of a shooting game.Keywords game, OpengGL, 3D, shooting game目录1 引言 (1)1.1 课题的背景及意义 (1)1.2 毕业设计的任务 (1)1.3 国内外现状的研究 (2)1.4 开发技术与开发平台 (3)1.4.1 开发技术 (3)1.4.2 开发平台 (3)2 OpenGL简介与3D图形学相关 (5)2.1 OpenGL简介 (5)2.1.1 OpenGl特点 (5)2.1.2 OpenGL功能 (6)2.1.3 OpenGL渲染 (7)2.2 3D图形学相关 (8)2.2.1 向量与矩阵 (8)2.2.2 变换 (8)2.2.3 投影 (8)2.2.4 3D裁剪 (9)3 游戏设计 (11)3.1 游戏的组成 (11)3.2 游戏的结构 (11)3.3 本游戏设计 (12)4 关键技术 (15)4.1 摄像机漫游 (15)4.2 碰撞检测 (16)4.3 粒子爆炸 (19)4.4 云雾效果 (20)4.5 简易AI (21)4.6 3D模型 (23)4.7 3D音效 (26)4.8 游戏场景随机地形 (28)5 运行游戏 (30)结论 (36)参考文献 (37)致谢 .................................................................................................................................. 错误!未定义书签。
OpenGL发展历程在计算机发展初期,人们就开始从事计算机图形的开发,但直到20世纪80年代末、90年代初,三维图形才开始迅速发展。
于是各种三维图形工具软件包相继推出,如GL,RenderMan等。
随着计算机技术的迅速发展,GL已经进一步发展成为OpenGL,现在OpenGL被认为是高性能图形和交互式视景处理的标准。
这些三维图形工具软件包有些侧重于使用方便,有些侧重于绘制效果或与应用软件的连接,但没有一种软件包能在交互式三维图形建模能力和编程方便程度上与OpenGL相比拟。
OpenGL(即开放性图形库Open Graphics Library),是一个三维的计算机图形和模型库,最初是美国SGI公司为图形工作站开发的一种功能强大的三维图形机制(或者说是一种图形标准)。
它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。
SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。
SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。
只有通过了ARB规范全部测试的实现才能称为OpenGL。
1995年12月ARB批准了1.1版本,最新版规范是2006年8月2日通过的opengl2.1,是自1.0版本后的第七次版本。
新版本适应以往早期的版本,也就是2.0, 1.5, 1.4, 1.3, 1.2, 1.1, or 1.0 GL不要任何改变就能在新版本下运行。
OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。
它低端应用上的主要竞争对手是MS-Direct3D,该图形库是以COM接口形式提供的,所以极为复杂,稳定性差,另外微软公司拥有该库版权,目前只在Windows平台上可用。
Linux下的OpenGL编程OpenGL是一个工业标准的三维计算机图形软件接口,它由SGI公司发布并广泛应用于Unix、OS/2、Windows/NT等多种平台,当然也包括Linux。
在Windows/NT平台上,一般的开发工具如VC、BC、Fortran Powerstation等都支持直接的OpenGL应用的开发;在商用Unix平台上,Motif同样很好的支持OpenGL(毕竟OpenGL最初是工作站上的东西);那么在Linux上呢?本文不着力于OpenGL编程的方法和技巧,而是把重点放在如何在Linux平台上开发OpenGL程序。
介绍支持OpenGL的几个工具包,并辅以详细的实例来阐述。
1. Linux下OpenGL编程环境简介OpenGL不是自由软件,它的版权、商标(OpenGL这个名字)都归SGI公司所有。
但在Linux下有OpenGL的取代产品:Mesa。
Mesa提供和OpenGL几乎完全一致的接口,对利用OpenGL API编程的人来说,几乎感觉不到任何差异。
Mesa是遵循GPL协议(部分遵循LGPL协议)的自由软件,而且,正是由于Mesa的自由性,它在对新硬件的支持度等方面都超过了OpenGL。
Mesa可以从取得。
得到Mesa后,依照说明即可生成编写程序所需要的动态、静态连接库和头文件。
了解OpenGL的读者都知道,OpenGL本身只提供三维图形接口,不具备绘制窗口、接受响应、处理消息等功能。
这些功能必须由第三方的开发环境提供,如上面提及的VC等等。
有人会想,既然在Motif下可以开发OpenGL程序,那么,使用Linux下的Lesstif 也应该可以。
是的,的确可以,但不幸的是,Linux下的Lesstif是一个很不成熟的产品,而且也不具有可移植性,所以应用Lesstif开发的人很少。
下面我们简单介绍几个常用的工具包。
在Linux下开发OpenGL程序,最常用的工具是GLUT(The OpenGL Utility Toolkit)。
计算机课体会心得5篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作计划、工作总结、述职报告、合同协议、演讲致辞、条据文书、心得体会、策划方案、教学资料、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays, such as work plans, work summaries, job reports, contract agreements, speeches, documents, insights, planning plans, teaching materials, other sample essays, and more. If you want to learn about different sample formats and writing methods, please stay tuned!计算机课体会心得5篇心得体会是人生的精粹,为我们带来更为深刻的思考和内在的充实,写心得体会的时候可以看出一个人的写作能力,下面是本店铺为您分享的计算机课体会心得5篇,感谢您的参阅。
1 引言OpenGL作为一种三维工具软件包,在交互式三维图形建模能力和编程方面具有无可比拟的优越性。
OpenGL是SGI公司开发的,可独立?操作系统和硬件环境的三维图形库,已在各种工作站和高档微机中运行,由于其强大的图形功能和跨平台的能力,已成为事实上的图形标准,被人们广泛应用于科学可视化、实体造型、CAD/CAM、模拟仿真等诸多领域。
在医学应用中,人体骨骼的使用能使医生和病人之间有一个良好的沟通,使病人能知道自己的病情,能很好的配合医生进行有效的治疗;在实践教学中,通过对人体骨骼的展示,教师能很好的讲解各个骨骼关节之间的运动关系,从而使学生对骨骼和骨骼关节之间的运动关系有更深刻的理解。
课题来源于徐州翰林高科技公司,该公司主要从事医学图像处理软件研究与开发。
课题“人体三维骨骼运动仿真研究”的目的是利用三维仿真技术,利用骨骼模型进行编程和控制展示人体骨骼及运动,主要包括三维建模技术及实现,人体运动方式设计等.课题是以visual C++和OpenGL为编程环境来仿真人体骨骼运动,通过对人体主要骨骼和骨骼之间的运动关系来展示人体的奇妙之处。
2 需求分析2.1 功能需求分析本设计是根据徐州翰林软件公司的要求,整理出人体骨骼的运动过程,并对该过程进行了细心的分析得出了如下的需求分析。
通过对徐州翰林软件公司的要求分析,得出系统应具有的功能如下:2.1.1 全景视图1) 点头:当用户想了解点头的具体细节时,通过键盘或鼠标操作能使骨骼做点头动作。
2) 摇头:当用户想了解摇头运动的具体细节时,通过键盘或鼠标操作使骨骼做摇头运动。
3) 抬左臂:当用户想了解左臂运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左臂运动。
做抬左肘运动。
5) 抬右臂:当用户想了解右臂的具体细节时,通过键盘或鼠标操作使骨骼做抬右臂运动。
6) 抬右肘:当用户想了解右肘运动的具体细节时,通过键盘或鼠标操作使骨骼做抬右肘运动。
7) 抬左大腿:当用户想了解左大腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左大腿运动。
8) 抬左小腿:当用户想了解左小腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左小腿运动。
9) 抬右大腿:当用户想了解右大腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬右大腿运动。
10) 抬右小腿:当用户想了解右小腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬右小腿运动。
11) 旋转:当用户想了解旋转的具体细节时,通过键盘或鼠标操作使整个骨骼做旋转运动。
12) 走步:当用户想了解走步的具体细节时,通过键盘操作使骨骼进行走步运动。
13) 放大:当用户想了解放大的具体细节时,通过鼠标操作来放大骨骼。
2.1.2 侧顶视图1) 点头:当用户想了解点头运动的具体细节时,通过键盘或鼠标操作能使骨骼做点头动作。
2) 摇头:当用户想了解摇头运动的具体细节时,通过键盘或鼠标操作使骨骼做摇头运动。
3) 抬左臂:当用户想了解左臂运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左臂运动。
4) 抬左肘:当用户想了解左肘运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左肘运动。
5) 抬右臂:当用户想了解右臂运动的具体细节时,通过键盘或鼠标操作使骨骼做抬右臂运动。
做抬右肘运动。
7) 抬左大腿:当用户想了解左大腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左大腿运动。
8) 抬左小腿:当用户想了解左小腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬左小腿运动。
9) 抬右大腿:当用户想了解右大腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬右大腿运动。
10) 抬右小腿:当用户想了解右小腿运动的具体细节时,通过键盘或鼠标操作使骨骼做抬右小腿运动。
11)旋转:当用户想了解旋转的具体细节时,通过键盘或鼠标操作使整个骨骼做旋转运动。
2.2 性能需求分析正确性:根据人体骨骼系统的运动设计软件,运动中的每一个操作在系统中都必须有所体现,保证程序的正确性。
3 概要设计3.1 模型格式选择保存三维图形数据的方法多种多样,有参数曲线法、CSG描述法等等,但常用的保存三维模型的方法是多边形逼近法,即用许多小多边形拼出模型的外观,文件中保存这些多边形的信息。
由于OpenGL中提供了最基本的由多边形构造三维模型的方法,因此从三维图形数据文件中读取模型数据并在OpenGL中绘制就很容易。
3ds模型数据格式和obj模型数据格式都是三维图形数据格式,3ds模型数据格式是目前大多数图形数据素材库中保存三维图形数据的最常用格式。
3ds文件由许多块组成,每个块首先描述其后的信息类别,即该块是如何组成的,块的信息类别是用ID来标识的,块还包含了下一个块的相对位置信息,其具体信息附录A。
Wavefront 的obj模型文件结构非常简单。
首先,它是由一些文本行组成的,每一行文本都是由一个关键字开头,紧跟着后面是该关键字所表示含义的具体参数,obj 文件不仅可以定义多边形模型,也可以定义自由曲面模型。
多边形模型就是可以用点、线、面等基本元素构造的模型,而自由曲面模型是指使用参数曲面造型定义的模型。
Obj模型数据格式的详细信息见附录A。
本系统是采取Wavefront的obj格式。
3.2 模型选择从Poser 5.0中导出人体骨骼模型,有成人和小孩的骨骼模型,有男性和女性模型。
本系统采用的是成人男性的骨骼模型。
将其按3ds格式从Poser 5.0中导出,然后通过三维软件quick3d将3ds格式转换为obj格式(三维软件quick3d的介绍和使用方法见附录B)。
3.3 单文档与控制台的选择用控制台来编程需要使用OpenGL的辅助库函数,则其通用性较差且一些控制比较困难。
用单文档则很容易解决这些问题。
单文档下的OpenGL编程环境设置请见附录C.3.4 菜单设计菜单设计的好坏会直接影响到用户操作的难易程度,从而影响到软件的推广使用。
菜单设计的简单明了会受到用户的欢迎。
菜单中包括退出应用程序、开头侧顶视图、点头、摇头、抬手、抬腿、旋转等操作。
3.5 工具栏设计制作工具栏的目的是:通过单击就能访问常用命令,工具栏按钮是菜单命令的快捷方式,但是它也实现了菜单中没有的命令3.6 状态栏设计状态栏不仅能显示菜单操作命令的帮助信息,还可以划分为一个或多个区域,它们分别对应着窗格、面板或指示符。
可以单独设置每个窗格的文本,这样,一个窗格可以显示文档的当前行、页号,可以显示当前Caps Lock和Num Lock的状态,还可以包含进度控件,以显示如保存、加载文档等较长的操作中所完成任务的比例。
3.7 弹出菜单设计弹出菜单是主菜单的快捷方式,可以很方便地进行操作,包括一些主要操作,如:开关侧顶视图,播放等操作。
3.8 放大方式的选择是用OpenGL中的选择与拾取机制进行局部放大,还是用OpenGL中的函数进行全体放大。
要使用OpenGL 的选择与拾取机制,首先要将场景绘制到帧缓存中,然后进入选择模式并重新绘制场景。
进入选择模式后,帧缓存的内容将不会发生变化,直到退出该模式。
退出选择模式时,OpenGL 将返回一系列与视景体相交的图元,与视景体相交的每个图元都将导致一次选择命中。
进行局部放大时会丧失人体骨骼的整体性。
进行全体放大时,需用到OpenGL 中的glScaled()函数,能较好的展示人体骨骼的完整性。
本系统采用OpenGL 中的glScaled()函数进行全体放大。
3.9 人体骨骼的基本控制人体骨骼的基本控制包括点头、摇头、抬左手、抬右手、抬左腿、抬右腿等等。
3.10 人体骨骼走步运动当进入走步模式时,为走步布置场景,并进行走步运动。
3.11 拖放操作按住鼠标左键不放,拖动鼠标,人体骨骼则随着鼠标的移动进行相应的旋转。
4 详细设计4.1 各个骨骼部分介绍a) 头骨骼(如图4.1):b) 左大腿骨骼(如图4.3)c) 左小腿骨骼(如图4.4)d) 左脚骨骼(如图4.5)e) 右大腿骨骼(如图4.6)f) 右小腿骨骼(如图4.7)g) 右脚骨骼(如图4.8)h) 左臂骨骼(如图4.9)i) 左肘骨骼(如图4.10)j) 左手骨骼(如图4.11)k) 右臂骨骼(如图4.12)l) 右肘骨骼(如图4.13)m) 右手骨骼(如图4.14)4.2 菜单详细设计主菜单分为:文件子菜单,控制子菜单,窗口子菜单,帮助子菜单。
4.2.1 文件子菜单文件子菜单有“退出”命令:关闭应用程序并释放绘图描述表。
4.2.2 控制子菜单控制子菜单由抬手子菜单,抬腿子菜单,头控制子菜单,旋转子菜单,移动子菜单,“播放”命令和“复原”命令组成。
a)抬手子菜单由“抬左手”和“抬右手”命令组成。
“抬左手”:由小键盘的数字键1来控制抬左臂,按一下则左臂向上旋转一度,左肘也向上旋转一度,当到达45度时则从原路逐渐返回到正常状态。
“抬右手”:由小键盘的数字键2来控制抬右臂,按一下则右臂向上旋转一度,左肘也向上旋转一度,当到到45度时则从原路逐渐返回到正常状态。
b)抬腿子菜单由“抬左腿”和“抬右腿”命令组成。
“抬左腿”:由小键盘的数字键3来控制抬左腿,按一下则左大腿向上旋转一度,而左小腿向下旋转一度,当达到45度时则从原路逐渐返回到正常状态。
“抬右腿”:由小键盘的数字键4来控制抬右腿,按一下则右大腿向上旋转一度,而右小腿向下旋转一度,当达到45度进则从原路逐渐返回到正常状态。
c)头控制子菜单由“点头”和“摇头”命令组成。
“点头”:由小键盘的数字键5来控制点头,按一下则头向下旋转一度,当到达45度时则从原路逐渐返回到正常状态。
“摇头”:由小键盘的数字键6来控制摇头,按一下则头向左或向右旋转一度,当向左或向右达45度时则从原路逐渐返回到正常状态。
d)旋转子菜单由“向左”、“向右”、“向上”和“向下”命令组成。
“向左”:由向左方向键控制,按一下则整个人体骨骼向左旋转一度,为了更好的观察,没有对此度数设限制。
“向右”:由向右方向键控制,按一下则整个人体骨骼向右旋转一度,为了更好的观察,没有对此度数设限制。
“向上”:由向上方向键控制,按一下则整个人体骨骼向上旋转一度,为了更好的观察,没有对此度数设限制。
e)移动子菜单由“向左”、“向右”、“向上”和“向下”命令组成。
“向左”:由字母“a”或“A”来控制,按一下则整个人体骨骼向左平移一段距离,当平移到一定程度时,人体骨骼会从原路逐渐返回到正常状态。
“向右”:由字母“d”或“D“来控制,按一下则整个人体骨骼向右平移一段距离,当平移到一定程度时,人体骨骼会从原路逐渐返回到正常状态。
“向上”:由字母“w”或“W”来控制,按一下则整个人体骨骼向上平移一段距离,当平移到一定程度时,人体骨骼会从原路逐渐返回到正常状态。
“向下”:由字母“s”或“S”来控制,按一下则整个人体骨骼向下平移一段距离,当平移到一定程度时,人体骨骼会从原路逐渐返回到正常状态。