logo资料库

基于VC_的OpenGL三维动画仿真及场景漫游的实现.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
第 27 卷 第 17 期 No. 17 Vol. 27 计算机工程与设计 Computer Engineering and Design 2006 年 9 月 Sept. 2006 基于 VC++的 OpenGL 三维动画仿真及场景漫游的实现 刘 升 1,2, 王行愚 1, 游晓明 1,2 (1. 华东理工大学 信息科学与工程学院,上海 200237;2. 上海工程技术大学 管理学院,上海 200065) 摘 要:介绍了基于 Visual C++ 编程环境及 OpenGL 图形标 准的三维物体运 动仿真及场景 漫游系统的开发 方法。并且以 一虚 拟导 弹按照抛物线飞 行并击中目标 靶后爆炸为例,详 细讨论了如何解 决三维动画仿真 及场景漫游的 一些关键技术,如 场景 的建 模,蓝天白云的 模拟,目标靶的绘 制,导弹实体的 绘制及运动控制 ,视点漫游技术 的实现等。 关键 词:场景建模; 仿真; 视点漫游; OpenGL; 三维动画 中图 法分类号:TP391.9 文 献标识码:A 文章编号:1000-7024 (2006) 17-3235-04 Implementation of OpenGL 3D animation simulation and scene walkthrough based on VC++ LIU Sheng1,2, WANG Xing-yu1, YOU Xiao-ming1,2 (1. College of Information Science and Engineering, East China University of Science and Technology, Shanghai 200237, China; 2. School of Management, Shanghai University of Engineering Science, Shanghai 200065, China) Abstract:The development method of 3D model movement imitation and scene walkthrough system based on visual C++ and OpenGL graphical criterion is introduced. By illustrating with a virtual missile, which is supposed to fly strictly according to parabola and exploded after hitting the target, the key technologies how to solve 3D animation simulation and scene roam problem, such as scene modeling, simulation of visual sky, drawing of target, drawing and movement controlling of 3D missile, implementation of view-port roam, are expounded. Key words:scene modeling; simulation; view-port roam; OpenGL; 3D Animation 0 引 言 OpenGL 是由 SGI 公司在其 GL(graphics library)基础上发 展起来的三维图形库,作为三维图形 API 的标准,它已被广泛 地应用于图形与动画绘制、虚拟现实技术和计算机可视化等 领域。OpenGL 实质是一个图形硬件的软件接口,与硬件无关, 使用简单,执行效率高,利用它提供的基本图形操作函数可以 小,在导弹试验模拟过程中,可以认为它们是不变化的。为了 能够比较清楚地观察,没有考虑天气的变化,在实现的时候只 设计一个很开阔的场地(可以是草地或者是荒漠地)加上蓝天 和白云作为衬托。 1.2 虚 拟 导 弹 等 作 战实 体 和 其 它 视 景 模型 虚拟导弹的飞行轨迹为自由抛物线轨迹,对虚拟导弹等 作战实体的模拟可分为两个方面来实现:首先建立实体的几 实现几何建模、图形变换、渲染、光照和材质、反走样、混合、雾 何模型,然后让虚拟导弹实体在场景中运动起来。导弹发射 化、位图和图像、纹理映射、交互操作以及动画制作等功能[1]。 架是固定不变,它的模拟可用一个竖立矩形板,并在上面固定 在本系统中,3D 视景系统是一个重要的组成部分,它可 以实现地形、蓝天白云和虚拟导弹的显示以及烟雾、爆炸等效 果,在系统的设计过程中,首先借助 3DS Max 建模软件构造出 虚拟导弹的实体模型,然后在 OpenGL 环境中利用相关函数 对其进行控制和变换。 一个圆筒形物体即可实现;目标靶的模拟是用 5 个平面加上 地面组成一个正方体来实现的;导弹实体是用 3DS Max 建模 软件制作后借助 OpenGL 和 Visual C++的相关函数读入系统 中,再显示出来并做相应的变换。 实体的运动实际上是模拟过程中实体特性的改变,在这 1 虚拟场景的可视化分析 1.1 虚 拟 地 理 环 境 的分 析 里主要是虚拟导弹的运动和虚拟目标靶的变形。 特殊的视景模型为系统生成了特殊的效果,特殊的视景 模型包括导弹尾焰,爆炸时的烟雾和碎片,这些特殊的效果可 虚拟导弹试验场的地理位置、形状特征随时间变化比较 通过粒子系统来实现。 收稿日期:2005-07-21。 作者简介:刘升 (1966-),男,湖北大冶人,博士研究生,副教授,研究方向为智能系统、模式识别; 王行愚,男,博士,教授,博士生导师; 游晓明,女,博士研究生,副教授,研究方向为计算机软件工程和分布式处理。 - 3235 -
2 三维动画仿真及场景漫游系统的实现 本系 统是 在 Windows 平台 Visual C++环 境下 通过 调 用 OpenGL 函数库编程实现的[2]。OpenGL 函数库与硬件平台无 关,在使用 OpenGL 函数库之前要进行特定的初始化工作,使 其与操作系统兼容,它的初始化操作如下:设置像素格式,建 立绘图描述表,清除缓存,光照初始化。下面就系统实现过程 中的几个具体问题进行分析和讨论。 2.1 虚 拟 地 理 环 境 的建 模 glEnable(GL_LIGHTING); glTranslatef(dx,dy,dz); glRotatef( ,1,0,0); glRotatef( ,0,1,0); glRotatef( ,0,1,0); //启动光照 //平移变换 //旋转变换 //绘制导弹 glDisable(GL_LIGHTING); glPopMatrix(); 绘制导弹时要结合顶点信息和材质信息并加上光照就可 虚拟的天空是用适当的晴空纹理映射到网格上实现的, 网格是将一个球面的一半按照一定的算法划分而得到的,设 以将导弹实体确切的显示出来。 2.3 虚 拟 目 标 靶 的 模拟 球面上任意一点为 P, 是指球面上的纬度,是指球面上的经 度,在球面坐标系下 P 点的坐标为 目标靶是采用 5 个平面(前面、后面、左面、右面和上面, 底下的面不可见)来模拟的一个平行六面体。虚拟导弹将从 cos cos , cos sin , sin 对于一个半球, 的变化范围是 0≤ ≤90,的变化范围是 0≤ ≤360。因此可以用以下坐标来生成所需的网格 , + , + + , , + 可以根据不同的精度来选择 和 ,如图 1 所示,这样 就得到天空的网格,再用适当的晴空纹理映射到网格上就得 到虚拟的天空。 上方向射入靶中,5 个平面将发生形变,以此来描述整个目标 靶的形变。在系统中分别将目标靶的每个面分成 16*16 的网 格,如图 2 所示,网格的多少将影响到变形的效果,每个点上 有对应的纹理坐标,描述目标靶外观的纹理图片将粘贴在上 面。在初始状态下,目标靶没有发生任何形变,网格的各个点 都在同一格平面上,目标靶初始状态表现为一个立方体。各 个平面都是先在 XOZ 平面上绘制之后再平移和旋转到合适 的位置,所以初始状态 Y 坐标相同。它的变形只是 Y 坐标的 变化,并且在平面的 4 条边上的点的 Y 坐标不发生变化,这里 采用数子高程技术随机地提高 Y 坐标,因为上面的变形大于 四周各个面,所以将设置上面的变形是四周各个面的两倍。 d d x z 图 1 天空的网格划分 导弹试验场的场地设计成一个大的平面,用适当的纹理 图 2 目标靶(正面为其中的一个面) 映射上去就可得到草地或者是荒漠地。虚拟天空和场地的相 2.4 粒 子 系 统 的 模 拟 对位置可以通过模型变换处理来调整,最后还要在使用的纹 理上加上光照,这样纹理就显示出逼真的效果。网格的初始 化 和 纹 理 坐 标 的 求 取 可 以 放 到 CMissileTestView:: OnCreate (LPCREATESTRUCT lpCreateStruct)函数中进行。 2.2 虚 拟 导 弹 实 体 的绘 制 及 运 动 控 制 将用 3DS Max 建模软件制作好的导弹模型调用相关函数 读入系统并进行相应的分析,读取顶点、材质信息等数据并分 1983 年,Reeves 提出一种模拟不规则模糊物体的方法,即 粒子系统。粒子系统的主要优点是可以利用非常简单的体素 来构造复杂的物体,为自然现象如火焰、水、雨、雪、草地和树 木等的造型提供了强有力的技术手段。一个粒子系统有大量 称为粒子的简单体素构成,每个粒子有一组属性,如位置、速 度、颜色和生命期,粒子的初始值由随机过程产生,粒子本身 往往由位于空间的某个地方的粒子源产生。粒子系统利用了 配内存空间。虚拟导弹在场景中做匀加速运动,在设计时它 随机过程,但它将物体的几何形状和行为组合在一个有机的 在竖直平面 YOZ 内按抛物线运动 模型中。粒子系统是不断进化的,它在生命期的每一刻,都要 { 坐标不变 1= 0+ 1 2 1= 0+ 2 完成以下 4 步工作: 步骤 1 粒子源产生新粒子,粒子源产生任意数目的新粒 子,它们的初始属性由随机过程控制。每个粒子都有一个生命 要在场景中绘制导弹实体,首先根据以上方程得到导弹 期,如果某些粒子不应删除,则可以赋予它无限长的生命期。 的位置,可以通过下列函数来完成 glPushMatrix(); - 3236 - 步骤 2 更新现存粒子属性,粒子的生命递减一个时间步。 步骤 3 删除“死”粒子,检查粒子的生命期,若为 0 则将
粒子从系统中删除。 步骤 4 显示粒子系统中所有现存的粒子。 在本系统中采用统一的数据结构如下所示,它描述了粒 子的属性,各个变量在不同的应用中表示的意义不完全相同 typedef struct { 分析仿真的进程,这就是所谓的视点漫游。OpenGL 透视投影 视图体为一锥形体如图 3 所示:点 0, 0 为视点,它具有裁 减功能和投影功能。 0, 0 1 //粒子的位置 bool active; //粒子是否被激活 float x; float y; float z; float dx; float dy; float dz; float anx; float any; float anz; float dim; float ddim; float r; float g; float b; } SMOKE; 导弹飞行的尾焰具有不规则的几何外形和内在的不确定 //粒子的生命周期 //生命周期变化因子 //粒子位移距离 //偏移角度 //粒子颜色 0, 0, 0 图 3 透视投影的取景体 (1)裁减功能。如图 3 所示,视图体为平面 0, 1截取锥形 体所得到的棱台体,它的 6 个面为裁减面,只有在视图体之内 的对象才能“看得见”。 (2)投影功能。视图对象在系统中是以三维坐标数据表 达,但最终是要以二维的方式显示在屏幕上的,在这里三维到 二维的数据转换就是有透视投影功能来完成的,透视投影按 照一点透视原理来计算,给人“近大远小”的视觉效果。 视点的作用好比现实中的摄像机,视点的变换模式有多 种,在这里采用级联模式和绝对模式。视点漫游技术是实现 场景漫游的关键技术。 级联模式中视点位置由被附着的实体决定,当确定了视 点相对实体的位置后,视点就随着实体运动。 性,由它的初始位置和导弹发射的位置决定,单个粒子采用单 在绝对模式下,视点不附着于任何实体,视点的位置和旋 个像素赋予适当的颜色,加上光照来模拟。 转均由手工操作来改变。 导弹爆炸时的烟雾和碎片都是以目标靶为中心向四面八 方散开,粒子的初始状态由特定的伪随机函数产生,它的发展 相对于中心由特定的算法产生偏移量和角度,爆炸烟雾采用 像素赋予适当的颜色,加上光照来模拟;爆炸随片采用小的三 考察函数为 void gluLookAt (GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz, GLdouble upx,GLdouble puy,GLdouble puz) 角形来模拟,并赋予适当的颜色,加上光照。 烟 雾 和 爆 炸 碎 片 的 初 始 化 将 在 CMissileTestView:: On- Create(LPCREATESTRUCT lpCreateStruct) 函数中实现[3]。 2.5 动 画 实 现 OpenGL 的双缓存技术是实现动画的主要技术,就是在屏 幕上绘制图形以前,先分配两个缓冲区,在一个缓冲区里执行 绘制的命令,同时在另一个缓冲区里执行显示的命令,在缓存 交互之间设置适当的时间间隔,由于计算机的运行速度快而 人体肉眼有视觉暂留的效应,这样就可以使所显示的图形连 续变化,达到动画的效果[4]。 利用双缓存技术实现动画应当建立一个系统时钟及相应的 驱动机制,在编码时可由 MFC 的 Cwnd 类成员函数 SetTimer(1) 完成。SetTimer(1,20,NULL) 函数设置一个系统时钟,它将驱动 缓存的交互,系统向 OpenGL 窗口发送 WM_TIMER 消息,将 由 OnTimer(1) 来处理这个事件,SetTimer(1,20,NULL) 可以在 CMissileTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中实现。 3 场景漫游 从计算机绘图的角度来看,一个可视化场景是由多个曲 面、曲线和不规则几何体所构成的一个复杂造型。在实际中 经常处于不同空间位置上观察仿真的情景,以便深入理解和 该函数定义期望的视点由参数 eyex、eyey 和 eyez 指定,而 参数 centerx、centery 和 centerz 指定期望视线上的任意一点,通 常取观测场景中心的点,这两点就是确定了视线的方向。而 参数 upx、upy 和 upz 指定向上的方向(即视景体自下而上的方 向)。通过改变参数 eyex、eyey、eyez 和参数 centerx、centery、cen- terz 的值实现漫游功能。 漫游 功能 的 编码 可放 置 在 CMissileTestView:: OnMouse- Move(UINT nFlags, CPoint point) 中用鼠标实现旋转,调用 Get- KeyState( ) 函数检测键盘状态来实现视点的平移。 图 4~图 7 是通过视点变换观察到的几个方位的情景。 4 结束语 OpenGL 是适用于各种计算机环境下的三维应用程序接 图 4 导弹发射时的场景 图 5 导弹将要击中目标 靶时的场景 - 3237 -
编程篇) [M].北京:清华大学出版社, 2003. [2] 尚游,陈岩涛.OpenGL 图形程序设计指南[M].北京:中国水利 水电出版社, 2001. [3] 和平鸽工作室. OpenGL 高级编程与可视化系统开发 (高级编 程篇) [M].北京:中国水利水电出版社, 2003. [4] 杨鹏,姚旺生.基于 PC 的虚拟地形漫游系统的实现[J].计算机 图 6 导弹击中目标爆炸的场景 图 7 导弹划过天空的场景 仿真, 2003,20(7):78-80. 口,成为国际上通用的开放式三维图形标准,本系统在 Visual C++环境下,调用 OpenGL 函数库和相关技术的运用实现了三 维动画仿真及虚拟场景的漫游,并达到了较好的仿真效果。 参考文献: [5] 范乃梅,范跃华.基于 OpenGL 的虚拟战场环境漫游系统[J].西 安工业学院学报, 2004,24(3):249-252. [6] 王源,刘建永,江南.OpenGL Optimizer 及其在大规模地形场景 漫游中的应用[J].计算机应用与软件, 2004,21(1):14-15. [7] 王悦,王衡,董士海.三维网上虚拟商场的绘制与漫游[J].计算机 [1] 和平鸽工作室. OpenGL 三维图形系统开发与实用技术 (基础 应用, 2004,24(3):121-123. (上接第3198页) 心、基层妇幼保健机构 3 个层次。在上述 3 个层次分别设立 数据存储地,基层妇幼保健机构根据《妇幼卫生主体数据集》 和部分业务信息分类及格式规范,已创建了出生登记数据库、 儿童保健数据库、妇幼卫生资源数据库。目前主要工作主要 划定的数据范围,从本地数据库中采集业务数据,并按照《妇 集中在已建立的数据库分系统的开发与应用上,其它相关研 幼卫生信息系统数据传输交换技术规范》将业务数据以 XML 文件格式,通过 Internet 网采用 VPN[12~14]的方式上传至省中心, 省中心保存接收到的上传数据文件,并将其导入本省数据库 中存储。省中心定期通过 Internet 网采用 VPN 的方式将数据 转发至全国中心。用户通过 Internet 网对本系统进行访问操 作,获取所需信息。基本业务数据汇总如图 2 所示。 服务 访问 Internet 数据传输 数据传输 Internet 数据传输 全国中心 省级中心 基层单位 图 2 基本业务数据汇总方式 5 结束语 究与开发工作正在进行中。 参考文献: [1] 柴晓路.Web 服务构架与开放互操作技术[M].北京:清华大学 出版社, 2002. [2] 陈孝威,陈陵云.三层体系结构的客户机服务器[J].计算机应用, 2000,20(1):10-11. [3] Chris Ullman, Chris Goode. ASP.NET 入门经典—C#编程篇 [M].北京:清华大学出版社, 2002. [4] 方东菊.基于 B/S 的学生学籍管理系统的设计与实现[D].华中 师范大学, 2002. [5] 樊银亭,何鸿云.基于客户机/服务器体系的二层与三层结构研 究[J].计算机应用研究, 2001,(12):23-24. [6] 张学军.基于 B/S 模式的汽车销售管理系统的设计与实现[J]. 计算机应用研究, 2003,(8):115-117. [7] 东方人华,刘振岩,刘慧敏,等.ASP.NET 数据库开发[M].北京: 清华大学出版社, 2004. 妇幼卫生共享服务系统数据库平台建设是一个复杂的系 [8] 张萍,谢强,丁秋林.ASP.NET 访问数据库的通用方法[J].计算 统工程,按照工程建设的总体要求,要建立国家级妇幼卫生科 机应用, 2004,24(6):256-257. 学数据共享中心和区域分中心,对国家的妇幼卫生数据进行 [9] 周晓娟,王法能,毛劲松.基于 B/S 的 Web 数据库技术[J].航空 集中管理。本文在对项目内容、项目要完成的主要任务概述 计算技术, 2005,35(4):82-83. 后,着重叙述了系统功能架构中划分的数据存储层、中间服务 [10] Kevin Loney. Oracle 8i 数据库管理员手册[M].北京:机械工业 层和应用层 3 个层次的设计,同时由于本项目是一个以大型 分布式数据库系统为核心,以各相关业务标准、医疗卫生科学 出版社, 2000. [11] John Adolph Palinski.Oracle 9i 开发指南:使用 Forms Builder 数据交换标准为基础的大型数据服务系统,以数据为中心是 开发 Web 应用程序[M].北京:清华大学出版社, 2004. 这一系统设计方案的一大特点,所有的业务标准和数据交换 [12] 倪剑虹,吕光宏.基于 VPN 的不同实现方式的技术研究[J].计 标准都遵循了这一特点,因此本文还详细叙述了系统的数据 算机应用研究, 2005,(7):257-260. 服务结构,对数据的分类和数据的如何处理进行了详细的分 [13] Andrew G Mason. Cisco 安全虚拟专用网络[M].北京:人民邮 析,从而保证底层数据的可用性和完整性,为高层应用、数据 电出版社, 2002.112-256. 分析提供大量的标准化的数据。 [14] Ferguson P, Huston G. What is a VPN[J]. The Internet Protocol 在整体框架设计的基础上已经初步完成了现有数据整理 Journal, 1999,2(1):2-5. - 3238 -
分享到:
收藏