对空中飞行目标的动态仿真及飞行图像的处理
2024-03-12
来源:步旅网
维普资讯 http://www.cqvip.com 第2O卷第12期 电脑开发与应用 文章编号:1003—5850(2007)12-O019-03 对空中飞行目标的动态仿真及飞行图像的处理 Dynamic Simulation on Air Object and Dealing with Flight Image 韩改宁 李永锋 (成阳师范学院成阳 712000) 【摘 要】在高炮射击和雷达跟踪的大型半实物仿真系统中,模拟空中目标的飞行航迹和对飞行图像的处理是非 常关键的环节。在VisualC++6.0开发环境下利用三维图形函数库OpenGL工具来模拟飞机的飞行航迹,并对 航路图像进行格式转换处理,用以满足仿真系统所要求的图像格式,这对于空中目标的仿真具有一定的参考价 值。 【关键词】图像,模型,OpenGL,仿真,飞机 中图分类号:TP311.1 文献标识码:A ABSTRACT In half real object simulation system about antiaircraft artillery fire and automatic tracking radar,simulating flight— path Orl air object and dealing with flight image are very key parts.Using tO need image requirement format on simulate system on simulating flight—path on plane by Visual C++with OpenGL and transforming fairway image,the paper is provided with a certain reference value about air object’S simulation. KEYWORDS image,model,OpenGL,simulation,plane 随着计算机软硬件的发展以及图形处理能力的增 MilkshapeModel类。MS3D数据结构中定义了文件 强,许多大型系统的仿真或半实物仿真得以实施。在高 头、顶点信息、三角形信息、材质信息、关节连接信息、 炮射击和雷达跟踪的大型半实物仿真系统中,对空中 关键帧数据等。函数的实现包括材质的装载、模型数据 目标(例如飞机、导弹)的飞行过程的模拟占此类仿真 的装入等。例如MS3D文件头结构 系统的重要部分,它直接影响仿真的效果,甚至是否成 struct MS3DHeader 功。这种带有实时性的仿真牵涉到复杂模型的读取、飞 {char m—ID[-IO]; 行参数的实时变化、与航路数据同步的图像显示、图像 int mversion; —格式转换的处理等。本文主要是模拟一架飞机飞行的 }PACKSTRUCT; —过程,并根据仿真系统所需求的图像格式进行航路图 函数的实现reloadTextures()和loadModelData 像的处理。软件模块总体结构如图1所示。 ()分别是装入材质和装入模型数据。MS3D模型的读 取和定时器的设置是在OnCreate函数中调用的。 2飞机参数的装载和飞行显示 设置飞机的飞行参数是利用InitAereo函数来实 现的,其中用fopen函数打开记事本程序来自填充飞 图1软件模块总体框图 行参数,可以在记事本中随意设置参数。飞机的角度、 1飞机模型的读取 斜距离、速度的初始化也是在InitAereo函数中实现 的。在调用InitAereo函数之前已用InitGL函数初始 一 飞机是非常复杂的几何模型,如果采用VC和 OpenGL命令来构建一个飞机模型是十分困难的。在 化OpenGL的状态,使它的光照位置,颜色深度等符 本文中对飞机的模型采用MS3D(MilkShape3D)来构 合程序需求。接着利用RenderScene函数渲染场景,此 函数比较关键,在它里面调用了glClear()、Camera()、 建,这是由于MS3D的模型文件格式简单,易于分析 MoveAereo()、DrawAereo()、glFlush()、SwapBuffers 和读取。文中建立一个与MS3D文件格式相对应的模 型数据结构,然后将MS3D的数据保存到该结构中, ()等函数。其中glClear函数功能是清除特定的缓冲 程序中自定义两个类:Model类和从Model类派生的 区。缓冲区是图像信息的存储区,一幅图像的红、绿、蓝 成分通常被称为颜色缓冲区或像素缓冲区。而在 * 2007—07—24收到,2007—09—18改回 ** 韩改宁,女,1977年生,硕士,研究方向:计算机图形图像处理。 维普资讯 http://www.cqvip.com 对空中飞行目标的动态仿真及飞行图像的处理 Camera函数中调用非常重要OpenGL库的 w0RD PositionY;//图像纵向位置 WORD Type;//图像类型 wORD width;//图像宽度 WORD Height;//图像高度 w0RD ColorDepth;//图像色彩度 WORD Stride;//扫描距离 DWORD TransColorKey;//色彩掩码 DWORD UseTransColorKey;//色彩掩码 gluLookAt()函数,此函数定义视图变换,根据眼睛的 位置、场景中心的位置和从观察者的角度往上指的矢 量,确定一个视图变换。程序中设定前三个参数为零也 就是人眼的坐标不变,利用MoveAereo函数改变被观 察场景中心的坐标,使飞机所在位置坐标不停的变化, 再调用DrawAereo函数来显示飞机,在DrawAereo 函数中调用glTranslatef函数glRotatef分别来改变 DWORD Tu--Offset-ImageData;//图像数据偏移地 飞机的位置和角度的变化。接着调用glFlush和 SwapBuffers函数,利用交互缓冲区让所有尚未执行 的OpenGL命令都被执行,其实在OpenGL内部使用 一条渲染流水线来顺序处理命令,OpenGL命令和语 句通常要排队,以便OpenGL驱动程序一次处理若干 条“请求”,这样使得程序较少地访问图形硬件,加速了 绘图速度,提高了性能,尤其是对复杂对象,效果非常 明显。在飞机显示时,程序中利用定时器反复调用 RenderScene函数来实现飞机飞行。飞机飞行图像如 图2、图3所示。 图2飞来时图像 图3离去时图像 3图像的处理和存储 图2、图3中飞机颜色是黑色的,是因为工程实际 中用灰度图像就能满足应用,并且这样图像处理简单, 易于提高处理速度。当然在利用OpenGL装载图像数 据时可以装载纹理数据,但数据量较大,处理复杂。系 统要求图像文件为二进制格式,图像色素格式为 RGB565,16b格式。而在windows下色素信息格式一 般位RGB888或ARGB888格式,程序中要把 RGB888转换到RGB565格式,这样做是为了节省存 储空间,相当于把图像进行了压缩,这样做数据是有丢 失的,但经验证明对仿真效果影响不大,反而加速了实 时仿真效果。下面是RGB888转化到RGB565的转换 公式: WORD TR=(r&0xF8)<<8; WORD TG=(g&0xFC)<<3 WORD TB=(b&0xF8)<<3; 下面是RGB565图像的文件结构 struct IMAGEHEADER {WORD PositionX;//图像横向位置 址 WORD*ImageData;//图像数据存放起始位置 表1 RGB888图像色素格式(24b) 偏移量 Bits 内容 O 8 R 8 8 G 16 8 B 表2 RGB565图像色素格式(16b) 偏移量 Bits 内容 O 5 TR 5 6 TG l1 5 TB 程序中利用CreateCompatibleDC函数创建一个 与指定设备兼容的内存设备上下文。内存设备上下文 是表示一个显示界面的内存块,也就是说先在内存中 准备好图像,准备复制到兼容设备界面所创建的设备 上下文。接着用BitBh函数将当前设备上下文中的位 图复制到内存设备上下文,当前 设备一般是指所用的显示器,这 时相当于拷屏功能。然后对内存 的图像按RGB888转化到 RGB565的转换公式(如图4)进 行处理,使图像最终复合所要求 的格式与大小。本程序在处理时 只处理有飞机图像的区域,方法 是利用飞机色彩与背景颜色的 差异先提取出飞机的轮廓,在此 用的是GetPixel函数来提取点 图4程序总流程图 像素的RGB值。经过这样处理, 所得到的飞机图像格式为RGB565,大小并不固定(因 飞机飞行时在不停的变化),经过这样的处理在分辨率 为800*600下最大图像才为163k,一条航路2 800幅 图像占用34M的空间,这大大减少了存储空间,也提 高了程序的运行效率。存储图像时,本文按RGB565 (下转第23页) 维普资讯 http://www.cqvip.com
第2O卷第12期 电脑开发与应用 的工作,对于目前网络状况也是不切合实际的。遥感技 术在大范围场景上提供了一种相对较好的解决方式, 利用高精度遥感数据,可以给出如此大范围特别是地 形起伏较大的场景以精确的地形模型,再加上对遥感 数据处理后的图片将给人非常真实和震撼的场景。相 4结束语 通过九寨系统的实现也证实了利用虚拟现实技术 与遥感技术结合开发虚拟大场景的可行性。虽然经过 定的制约,但是随着网络技术的发展,通过浏览器浏 精简的景区文件依然比较大,网络浏览速度依然受到 一对于以往通过3D建模而开发的虚拟大场景,利用遥 ■ 感技术建模在视觉效果上具有很大的优势。 本系统是采用0.6lm和2.44m精度进行融合后 的快鸟遥感数据,效果如图3所示。 景点图片 景点虚拟游览 喾嚣臻赫赫 ・蠢:i童 蛳”t 謇萎誊 鬻謦寒誉 囊 : ~ ; ・罐 一 图3系统局部效果图 3.2问题与解决 在现有网络环境下,网络传输问题依然是一个大 问题。如此大场景建立起来之后场景文件是比较大的, 如何压缩文件就成了一个重要的问题。在实际的实现 过程中提出了以下几个解决办法。 ①因为是对大场景的开发可以对地形模型进行简 化,利用开发工具去除不必要的细节,简化模型取出不 必要和不影响大局的细节数据可以减少2/3以上的文 件大小。 ②对相似模型利用DEF/USE的实例引用法进行 复制,减少模型的数量。 ③由于九寨中以树木和水体为主,我们将成百幅 的小的地形贴图中大量的山体、树木、河流等大体相近 的小图片采用一幅进行加工过的图来重用,基本上不 影响整体效果,但是可以减少将近一半的文件大小。还 可以采用对地形模型进行色彩渲染的方法完全脱离地 形贴图,这样文件大小会大大减少,但是相应场景效果 的真实性会大大降低。 ④利用VrmlPad对wrl文件进行压缩,压缩后的 格式为wrz,由于场景的重构是在客户端进行的,所以 对场景的重构、显示和交互速度不会产生太大影响。 当过于靠近物体或者地面时由于遥感数据精度导 致地面或者物体比较模糊。 解决办法:通过修改ViewPoint节点来控制观察 高度,避免用户因为视点过低而影响观察效果。 览形象逼真的三维立体效果将是大势所趋。而随着网 络传输和计算机硬件性能的提高,三维浏览的瓶颈问 题将会得到解决。通过虚拟现实技术和遥感技术展现 虚拟大场景不仅仅在旅游业方面大有前途,在更多领 域也将会得到更好的发展。 参考文献 [1] 汪兴谦.VRML编程实例详解[M].北京:中国水利电 力出版社,2002. E2] 姜安德,周玲.VRML从入门到精通[M].北京:国 防工业出版社,2002. [3] [美]Andrea L,Ames David R,Nadeau John L et a1.宗 志方,季 晖,谭江天等泽.VRML资源手册[M].北 京:电子工业出版社,1998. [4] 万剑华,潘正风,李清泉.基于VRML的虚拟城市的建 立EJ].测绘通报,2002(5):17-19. [5] 崔永毅.基于VRMI 的Web VRGIS研究[J].计算机 工程,2002(8):8—10. [6] 梅安新,彭望,秦其明等.遥感导论[M].北京:高等 教育出版社,2001. (上接第20页) 图像文件结构进行填充,利用文件读写函数Open、 Write来完成对图像文件结构的填充。此程序的总流 程图如图4所示。 4结 论 本程序以Visual C+4-6.0为软件平台,结合 OpenGL图形库函数模拟飞机的飞行航迹,并根据实 际需要对飞行图像进行转换,节约图像的存储空间,在 对空中飞行物体的仿真中具有较强的实用价值。 参考文献 [1] RichardC Leinecker著.金帆翻译组译.Visual C++ 开发人员参考手册[M].北京:机械工业出版社,1998. [2] 和平鸽工作室.OpenGL高级编程与可视化系统开发 [M].北京:中国水利水电出版社,2003. -131 孙 鑫编著.VC++深入详解[M].北京:电子工业出 版社,2006.