天气雷达产品锥面显示程序设计-论文.doc_第1页
天气雷达产品锥面显示程序设计-论文.doc_第2页
天气雷达产品锥面显示程序设计-论文.doc_第3页
天气雷达产品锥面显示程序设计-论文.doc_第4页
天气雷达产品锥面显示程序设计-论文.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号:分类号:tn959.4tn959.4 u u d d c c:d10621-408-(2007)d10621-408-(2007) 0344-00344-0 密密 级:公级:公 开开 编编 号:号:20030221612003022161 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 天气雷达产品锥面显示程序设计天气雷达产品锥面显示程序设计 论论文作者姓名:文作者姓名:莫云莫云凯凯 申申请请学位学位专业专业: :电电子信息工程子信息工程 申申请请学位学位类别类别: :工学学士工学学士 指指导导教教师师姓姓名名( (职职称称) ): :舒定波(工程舒定波(工程师师) ) 论论文提交日期:文提交日期: 2007 年年 06 月月 05 日日 天气雷达产品锥面显示程序设计天气雷达产品锥面显示程序设计 摘摘 要要 天气雷达产品对天气预报有着重要的指示作用,为了提高预报的准确性和形象性,对 目前的雷达终端产品有一定的改进,本文介绍了气象雷达终端锥面图形软件的绘制原理及 软件实现方法,应用 directx 工具建立考虑地球曲率的锥面模型,结合 visual s 2003 编程工具,生成对应各个 cut 的图像,将生成的图像作为对应的纹理图片,将模型与 图像通过纹理贴图的方法结合在一起,再经过灯光,材质,纹理,视角转换等进行纹理效 果处理,让生成的产品更加逼真,易于使用者操作,最终构成气象雷达终端锥面图形的应 用软件,并提供软件生成产品的图像实例,在软件的终端还加入了用户控制部分,可以对 任意位置的回波信息进行观察,同时在终端提供了大地参考面和雷达站点的简要信息,让 软件的使用者一目了然。 关键词:关键词:雷达体扫数据 实体建模 directx visual s 2003 纹理贴图 the designing of display program of weather radar products abstract the weather radar products has performed an very important part in the weather forecast.in order to enhance the forecast accuracy and the iconicity, the present radar terminal products had been improved. this article introduces the weather radar terminal three dimensional graph software plan principle and the software realization method, by using the directx tool establishment considered the curvature of the earth the conical surface model, unified the visual s 2003 to program the tool. the production corresponds each cut the image, and produce the image took corresponding the texture, the model and the image unified in together, the process light, the material quality, the texture, the angle of view transformation and so on carried on processing, let the production the product be more lifelike, the easy user to operate, finally constituted the weather radar terminal three dimensional graph application software, and provides the software production product the image example. key words: radar volume scan data entity modeling directx visuals 2003 texture map 目录目录 论文总页数:36 1 引言引言1 1.1 概述概述.1 1.2 天气雷达背景知识介绍天气雷达背景知识介绍.1 1.3 天气雷达产品介绍天气雷达产品介绍.2 1.41.4 研究意义研究意义3 1.5 开发环境介绍及研究思路开发环境介绍及研究思路.3 2 建立模型建立模型5 2.1 directx 基础知识基础知识 5 2.2 windows基本编程原理和方法基本编程原理和方法.6 2.3 模型的构成思路和设计原理模型的构成思路和设计原理.9 2.3.1 雷达基数据产品剖析雷达基数据产品剖析9 2.3.2 程序概要设计流程程序概要设计流程10 2.3.3 两种模型的对比两种模型的对比12 2.4 地球曲率对模型的影响地球曲率对模型的影响.16 2.5 模型的效果处理模型的效果处理318 2.5.1 灯光效果灯光效果18 2.5.2 材质效果材质效果19 2.5.3 3d 转换效果转换效果 19 2.5.4 模型控制模型控制20 3 反射率产品图像生成反射率产品图像生成22 3.1 反射率数据提取反射率数据提取.22 3.2 反射率图像生成反射率图像生成.22 3.3 加载色表文件加载色表文件.23 4 模型与图像结合(纹理贴图)模型与图像结合(纹理贴图)25 4.1 贴图原则贴图原则.25 4.2 纹理贴图效果处理纹理贴图效果处理.25 4.2.1 纹理坐标纹理坐标25 4.2.2 纹理提交模式纹理提交模式.26 4.2.3 纹理过滤方式纹理过滤方式.27 4.2.4 纹理混合纹理混合27 4.2.5 纹理透明纹理透明28 4.2.6 纹理动画及多级纹理纹理动画及多级纹理28 4.3 产品生成产品生成.29 4.4 外界控制外界控制.31 5 程序设计中需要注意的几个问题程序设计中需要注意的几个问题32 5.1 关于模型建立的问题关于模型建立的问题.32 5.2 关于色表读取的问题关于色表读取的问题.32 5.3 关于纹理贴图的问题关于纹理贴图的问题.33 结论结论.33 参考文献参考文献.33 致谢致谢.35 声明声明.36 第 1 页 共 30 页 天气雷达产品锥面显示程序设计天气雷达产品锥面显示程序设计 1 引言引言 1.1 概述概述 天气对人类的生产生活都起着非常重要的作用,天气预报则是人类研究天气,掌握天 气,以便更好应用天气的主要手段,因此,天气雷达在天气预报中扮演一个非常重要的角 色。新一代多普勒天气雷达对气象预报者及时,准确的预报天气,将气象给人类带来的灾 害尽可能将降到最低。 新一代多普勒天气雷达的体扫数据提供了强度,速度,谱宽三个基本信息。经过后端 软件处的理,可以演变成多个适用的软件二次产品,给使用者带来方便。目前,我国大多 数气象产品是以二维形式来表示三维结构,最具有代表的是 ppi(plan indicator) 、 rhi(range height indicator) 、cappi(constant altitude plan position indicator),这 些方法之局限于二维表示方法。 本文所采用的方法是通过 directx 工具进行锥面实体建立模型,通过 visual studio .net 2003 工具读取体扫数据,生成对应模型的天气图片,将二者结合,通过 directx 纹 理贴图方法处理,得到实际应用的雷达立体锥面显示软件。 1.2 天气雷达背景知识介绍天气雷达背景知识介绍 气象目标的雷达方程1: (1-2-1) 2 2 2 2 2 3 | 2 1 | 2ln1024 2 rm mgc zp p et r 其中雷达天线所接收的回波信号功率; pr 光速;c 雷达发射机输出的脉冲功率; pt 发射脉冲宽度; 天线增益;g 天线水平波束宽度; 天线垂直波束宽度; 雷达发射信号波长; 第 2 页 共 36 页 气象目标的复折射指数,对于水滴,当温度为时,0.93;mc0。 2 2 2 | 2 1m | m 雷达反射率因子,在瑞利反射区,;其中为第 i 个降 ze 单位体积 6 dzie di 水粒子的直径;r 目标距离。对于本课题主要研究是 雷达反射率因子;将 ze 其进行的立体锥面显示,让雷达产品形象,直观地展现。 通过上面的雷达方程,常规天气雷达的探测原理是利用云雨目标物对雷达所发射电磁 波的散射回波来发现气象目标,并测定其空间位置、强弱分布、垂直结构等;新一代多普 勒天气雷达除了能起到常规天气雷达的这种作用外,它的重大改进是可以利用物理学上的 多普勒效应来测定降水粒子的径向运动速度,并通过这种速度信息来推断降水云体的风速 分布、风场结构特征、垂直气流速度等。具有强探测能力和高探测精度,新一代天气雷达 采用高低两种脉冲重复频率,就 c 波段来说,对台风,暴雨等大范围的强降水天气的监测 距离为 460km,对雹云、龙卷涡度等小尺度强天气系统的有效监测和识别距离为 230km, 超过 230km,将没有速度数据,风暴识别、跟踪和预报未来位置可达 345km,在 345-460km 之间虽没有算法应用,但仍有反射率因子产品;先进的实时标校系统,新一代雷达的雷达 参数在建站时都经过仔细的标准和标定,在日常的运行中,实时的或每经过一次体扫之后, 对影响雷达定量的参数进行一次自动校准和检测,以确保雷达对回波强度的准确测量;同 时还具有强大的地物杂波抑制能力;先进的产品算法和智能型的探测分析系统。 1.3 天气雷达产品介绍天气雷达产品介绍 应用多普勒雷达探测到的回波强度、径向速度和速度谱宽基本数据,经过加工处理, 坐标转换和计算生成某些与气象有关的物理量后而产生的数据或图像称为产品。严格来说, 雷达产品约 28 个,只是因为不同的分辨率和不同的数据色标等级,同一个产品又可以分 为多个。因此,共有约 80 个雷达产品的编号是不连续的!根据雷达产品的分类方式不同, 可将雷达产品分为基本产品和导出产品,或基本数据产品、物理量产品、信息产品或者锥 面产品(仰角)和体积产品2。 以前常用的二维雷达产品有平面位置显示(ppi) ,即雷达天线以固定仰角,全方位扫 描的探测方式获取的数据,以极坐标的形式,用不同的彩色色标表示数据值的大小或方向。 距离高度显示(rhi) ,即雷达天线以固定方式以固定方位作俯仰扫描,这种探测方式获取 的数据用不同色标表示数据的大小和方向,以极坐标显示出来的图像产品。如今运用的天 气雷达产品是多种多样的,不同的台站可以根据不同的地理对产品不同需求。根据实际需 求,对雷达体扫数据的强度,速度,谱宽基本信息运用不同算法,得到精简实用产品。在 此,本文主要是对基本的反射率数据进行锥面显示,通过该产品可以直观清楚地了解地形, 云块,风场等对气象的影响,能够逼真的反应外部真实世界,增加用户操作选择功能,对 第 3 页 共 36 页 不同仰角的回波数据进行立体锥面显示,用户通过键盘控制能够对不同位置信息进行全面、 细致研究,将雷达扫描方式的回波信息形象展现给用户,相对于传统的二维产品具有可视 化程度高、立体动态感强的特点。 1.41.4 研究意义研究意义 现代天气雷达产品在天气预报中有着十分重要的参考意义,通过本课题能够直观,形 象,生动地展示雷达产品,让预报者短时间判断天气;从而迅速,果断,准确的做出决策。 立体锥面气象产品可以直观,清楚地了解地形,云块等对气象的影响,能高度逼真的反映 外部真实世界,对气象预报工作者的预报提供了参考依据,让预告工作者能够及时为社会 公众提供最新的天气信息。同时,通过本文的研究,将三维概念在气象领域中的应用提供 给所有关心气象事业发展的人员,将锥面模型的概念应用到天气预报系统中,让真实的世 界反映到天气预报系统之中,让以后的预报更加形象、真实;给以后的其他相关气象产品 的开发人员提供新的思路。 1.5 开发环境介绍及研究思路开发环境介绍及研究思路 visual s 2003 开发环境集成了 visual basic.net、c#、visual c+、asp.net 以及 visual foxpro 开发工具,visual studio.net 都可以提供近乎完美 的解决方案,visual studio.net 提供了包括设计、编码、编译调试、数据库联接操作等 基本功能和基于开放架构的服务器组件开发平台、企业开发工具和应用程序重新发布工具 以及性能评测报告等高级功能。本程序主要使用 visual c+工具,因为它具有面向对象、 可视化开发;众多的开发商支持以及业已成为工业标准的 mfc 类库;visual c+封装了 windows 的 api(应用程序接口)函数、user、kernel、gdi 函数,帮助我们弄清了许多函 数的组织方法,隐去了创建、维护窗口的许多复杂的例行工作,简化了编程。在本程序中, 重点是应用 directx 进行立体锥面建立模型,directx 环境中能够建立任何想象的图像, 而最基本的都是由点构成线,而由线构成面,再由面构成体,建立实用的几何体锥面结构。 由于 visual s 2003 能够很好地应用 directx 所建立的几何体模型,二者具有很好的 兼容性和移植性。综上所列,本研究选择 visual s 2003 中的 visual c+能够实现 本文的要求。 微软推出的 directx 开发工具,其 direct 就是“直接”的意思,x 是代数中常用于表 示未知数的字符,在这里可以理解成表示所有的一切。在游戏中对所有的一切硬件直接操 作,这就是 directx 的意思。微软的 directx 软件开发工具包(sdk)提供了一套应用程 序编程接口(apis) ,这个编程接口可以开发高质量、实时的应用程序,当然最主要的就 是游戏所需要的各种资源。directx 技术为软件开发者提供硬件无关性。微软开发 directx 的主要目的之一是促进 windows 操作系统上的游戏和多媒体应用程序的发展。另一方面, 微软公司开发 directx 是为了在当今或今后的计算机操作系统上提供给基于 windows 平台 第 4 页 共 36 页 的应用程序以高表现力、实时访问硬件的能力。directx 分为普通的安装包和开发工具包, 为了应用 directx 建立锥面立体模型,因此必须对 directx 开发工具包了解。 本文的最终结果是将雷达的体扫数据中的反射率数据,形象,直观,准确地显示在对 应的雷达锥面模型位置上。因此,本文的重点是在建立锥面上,只有建立好的锥面模型, 才能将回波位置准确地反映。通过 directx 工具建立好立体锥面几何体模型,应用 visual s 2003 工具解析体扫数据文件,生成不同仰角下的纹理图像,然后再应用 directx 下的纹理效果处理,完成立体锥面显示效果,在窗体上增加选择不同仰角的立体锥面显示效 果,通过键盘控制对锥面模型的各个角度信息准确反映。 第 5 页 共 36 页 2 建立模型建立模型 2.1 directx 基础知识基础知识 在计算机的 3d 世界,可以表现出真实世界中所有的事物。在计算机的三维世界中, 如果要显示一个物体,首先关心的就是这个物体怎样由点来构成。然后用这些点来构成多 边形,由多边形来构成立体的几何形体。只要能确定了点的位置,数量,颜色,就可以形 成任何你需要的物体。在 directx 3d,为了保证永远使用正的 z 值来表示距离,惯用左手 坐标系来表示整个世界的位置。三维旋转变换可以使物体在三维立体空间中产生旋转。旋 转可以是沿着 x 轴,或 y 轴,或 z 轴进行。三维缩放可以使物体在三维立体空间中产生大 小的缩放效果。在三维坐标中观察世界时,需要确定以下几个问题:()在那个位置观察: 需要使用坐标来表示这个观察点的准确位置,这个坐标是在计算机中的实际坐标系中的值。 ()向哪个方向观察。 ()对于观察者来说,代表上方的方向。最后经过三维透视转换显 示在显示屏幕中。direct3d 和系统其他组件的关系如图 13: 图 2.1direct3d 和系统其他组件的关系 应用程序(win32 application)通过调用 direct3d 提供的 api 函数(direct3d api) 实 现 3d 图形功能。direct3d api 调用硬件设备(hal device)提供接口。硬件抽象设备调 用具体的硬件驱动程序的接口(ddi) ,有具体的硬件驱动程序来操作具体型号的显卡硬件, 完成最终 3d 操作。通过这样的分层结构,可以在上层使用相同的接口调用来使用任何类 型的 3d 显卡,实现需要的 3d 功能。 win32 applicationwin32 application direct3d api gdi hal device device driver interface(ddi) graphics hardware 第 6 页 共 36 页 使用 direct3d 编程时,首先创建 direct3d 对象,在程序结束时,也必须释放 direct3d 对象。在创建完 direct3d 对象后,可以获得指向 direct3d 对象的接口指针。通 过指向 direct3d 对象的接口指针,我们可以调用 direct3d 对象提供所有接口函数。创建 direct3d 对象的代码如下所示: lpdirect3d9 g_pd3d = null ; /定义 direct3d 对象的指针,初始化为空 if( null = ( g_pd3d = direct3dcreate9( d3d_sdk_version ) ) ) return e_fall;/判断返回值,如果为空,表示创建失败 direct3d 设备是 direct3d 中的渲染组件,负责把 3d 场景进行作色、光照等效果处理, 形成可以显示的图像。设备中包含了渲染状态、坐标转换等信息。在程序中,我们可以认 为 direct3d 设备就是绘图的物理设备,而不需要关心使用什么具体的显卡在进行 3d 操作。 lpdirect3ddevice9 g_pd3ddevice = null;/定义 d3d 设备接口指针初始化为空 /定义 present 参数结构 d3dpresent_parameters d3dpp; zeromenory( d3dpp.windowed = true; d3dpp.swapeffect = d3dswapeffect_copy_vsync; if(failed(g_pd3d-createdevice(d3dadapter_default,d3ddevtype_hal,hwnd, d3dcreate_software_vertexprocessing, /调用函数创建设备,如果函数执行失败返回为空。 经过上面的简单介绍,了解到 direct3d 中三维世界的表示方法,坐标系统,以及如何 把三维世界中的模型显示在显示器中的概念和原理,以及基本的创建 direct3d 对象和创建 direct3d 设备的方法,对 direct3d 有一个总的认识。但是光了解这些还远远不够,要应用 一个窗口,就必须对 windows 窗口模式的编程原理进行掌握。 2.2 windows 基本编程原理和方法基本编程原理和方法 用 c+编写一个 windows 应用程序,必须掌握 windows 的基本编程原理。windows 程序需要一个 winmain()函数,该函数主要是建立应用程序的主窗口。用 windows 窗 口结合 directx 建立几何体模型,对一个基本的 windows 窗口,其构成有以下几部分,注 册一个窗口类,然后创建窗口,在创建窗口的过程中可以对窗口的属性进行修改,包括窗 口的名称、大小、位置等。接着初始化 3d 设备(首先根据 directx 的版本号创建 3d 对象, 接着定义 present 参数结构,设置 present 的各项属性,跟着创建 d3d 设备,在此可以调 用 setrenderstate 函数设置渲染状态);若初始化初始化 3d 设备成功的话,接着就可以 创建任意几何体模型了(用 createvertexbuffer 创建顶点缓存区,接着可以定义一个指 第 7 页 共 36 页 针,用于复制顶点数据时指向顶点缓冲区的内存地址) 。初始化后,可以显示窗口了,并 且可以进行消息的相互传递,可以对键盘,鼠标等外部设备动作进行响应,执行对应的事 件。接着可以对几何体模型进行着色,着色之前可以对其进行纹理,灯光,视角等属性进 行详细编辑,使立体锥面几何体模型更加生动,逼真。完成着色之后,接着释放设备,最 后应该注销窗口。windows 程序是通过操作系统发送的消息来处理用户输入的,程序的主 窗口中需要包含处理 windows 所发送的消息代码: 下图是 windows 程序和 windows 消息的基本流程4: 图 2.2windows 程序和消息处理流程图 windows 是消息驱动(或事件驱动的)操作系统。消息驱动意味着操作系统的每一部 分和其他部分以及应用程序之间,是通过 windows 消息进行通信。windows 程序在开始 部分也需要进行初始化,但初始化完成后就开始等待用户的各种输入。一旦用户有任何输 入(例如键盘或鼠标输入) ,操作系统便会感知,然后向相应的应用程序发送消息,程序 要能够随时接受并处理这些消息。函数入口: 注册一个窗口类 main()函数开始 开始执行 终止执行 初始化 从消息队列取得一个消息 默认处理 处理消息 当前消息是否 “退出”消息 是否本程序 要处理的消息 第 8 页 共 36 页 图2.3main函数的流程图 从图2.3我们不能看出,在directx中,任何函数都是从main()函数开始执行程序,作 为程序的入口,在main()几乎包括整个程序的流程。在directx中,进入main()函数后, 首先需要注册一个窗口类,在窗口类中,包括窗口的类名,窗口模式,消息处理等属性; 注册完一个窗口类后,接着就可以创建应用窗口了;跟着初始化3d对象和设备,如果成功, 就可以显示窗口,更新窗口,进入消息处理函数,然后进行窗口内存释放;如果不成功, 直接进入到内存释放。最终整个函数返回0值。以上就是整个directx的main()工作过程, 在本文中,需要建立模型,在初始化3d设备和对象成功之后,就可以初始化模型,然后进 行渲染等3d效果处理。 消息处理函数是一个很重要的函数,通过参数的传递,该函数可以响应 windows 应用 下的任何事件。在 msgpro()函数下,对 msg 消息进行消息类型的判断,当窗口销毁时,就 创建应用窗口 初始化 3d 设备 及对象是否成功 显示窗口,更新 窗口 进入消息处理函 数 窗口内存释放 返回值 0 第 9 页 共 36 页 触发 wm_destroy 事件,进而调用 cleanup()函数和 postquitmessage( 0 )函数。将创建 3d 的内存空间,设备对象及模型的存储空间进行释放,节约内存资源。而当响应 wm_paint 消息时,就调用 render()和 validaterect 函数。对窗口区域的模型色彩进行渲 染,让立体模型更加生动形象。最后 msgpro()函数将要执行的事件反馈给主函数,实现消 息响应功能,以上就是消息处理函数的整个过程,当然消息处理函数的响应事件是很多的, 包括一个键盘的任意键被按下事件,鼠标的移动事件等等。开发人员可以根据自己的需要 来进行适当的消息事件选择。 图 2.3 介绍了 main()函数的整个程序的执行过程,在上面则介绍了 windows 如何响应 消息,对一个 windows 程序的运行过程也有一个总体的认识和了解,应用上述简单的框架, 开发者可以在初始化设备及模型之后初始化自己所能想到的任意几何体模型,然后进行 directx 下的灯光,材质,纹理,视角转换,雾化,雨化,雪化等特殊效果处理手段,进 行渲染,建立切切实实的立体图形。呈现生动,形象的图形,开发者可以发挥自己的想象 能力,建立自己的应用模型,运行 directx 先进技术,结合构成思路,将一个几何体模型 分解成若干三角形构成,而三角形又是由点构成的,通过点的连接顺序不同,绘制不同的 几何体模型,运用到实际中 2.3 模型的构成思路和设计原理模型的构成思路和设计原理 2.3.1 雷达基数据产品剖析雷达基数据产品剖析 本文研究的是对天气雷达产品的反射率信息进行立体锥面显示,关键在于如何建立的 模型才是最佳的模型,为了能够建立最优模型,必须对雷达的反射率产品的构成结构进行 深入的剖析。 图 2.4锥面模型分析 从上图我们可以看到,一个锥面模型的构成需要知道方位角,仰角,斜距,而这些数 据都可以从雷达的体扫数据得出,在雷达数据中,雷达所能探测的最远距离是 512km,而 方位角 (theta) 斜距(m_c) 仰角(fi) 第 10 页 共 36 页 每公里则有八个点,即每个点所代表的距离是 125m;在方位角上,theta 的变化范围为 0360 度,在方位角上,总共有 600 个径向;而在仰角上,对一般的雷达来说,变化范围 小于 90 度,在低仰角扫描的时候,由于受到地物杂波的干扰,为了能够很好地消除地物 杂波,在低仰角往往扫描两次,而随着仰角的增大,其仰角的抬升间隔页逐渐增大,因为 在高仰角扫描的时候,天气现象已经离雷达观测地很近,没有多大的实际预报价值。由上 可知,一帧平扫扫描数据为 600512m 个(m 为所观测的参数个数) ,这样一个完整的 体扫数据文件有数据 600512mn(n 为仰角层数,m 为所测参数个数) ,它记录了 不同仰角层、不同参数的各个方位回波强度。利用 directx 技术,方位角、仰角、作用距 离(即斜距)确定了三维立体空间坐标,将回波数据强度转变为物体模型中的颜色,这样 观测员便可以根据三维立体锥面模型中的颜色变化直观地了解气象的变化与空间结构的分 布情况,充分反映立体、动态、连续、多层的情况。本文通过以下过程来实现。 2.3.2 程序概要设计流程程序概要设计流程 所有函数都是从 main()函数开始执行的,然后进行注册一个窗口,创建窗口,对于本 文的 directx 来说,必须初始化 directx3d 设备及对象成功后才能够初始化几何体模型, 只有初始化几何体模型成功后才对窗口进行显示,更新,和消息处理,通过消息处理事件, 转译消息,分散消息,最后进行几何体模型的渲染;构成一个生动的几何体模型,这就是 本文构建模型的思路,然后运用 directx 工具下的贴图效果处理手段,对立体锥面模型进 行渲染效果处理。下面是设计的主流程图 2.5: 开始 注册窗口类, 创建窗口 初始化 3d 设 备及对象是 否成功 初始化几何体 模型是否成功 显示窗口,更新窗口, 进入消息循环处理 第 11 页 共 36 页 图 2.5整个程序设计流程图 图 2.5 是对整个程序设计流程的概述,对于其中初始化 3d 设备及对象的概述和流程 在前面以前提及过,对 3d 立体锥面模型的构建,如果几何模型中使用了纹理贴图,首先 应该打开纹理图片,本文主要是通过纹理贴图手段来达到立体效果。成功后按照对应的结 构体创建顶点缓存区,缓存区创好后,就需要按设计要求往顶点缓存区存放点数据。模型 的构成就是这样,建模的简要流程图如图 2.6: 无 wm_quit 消息事件 peekmessage 函数是否为 1 转译消息,分播消 息 渲染几何体模型 释放窗口内存空间 返回值 0,程序结束 创建模型开始 文理图片打开 是否成功 创建顶点缓存 区是否成功 按设计要求存 放点数据 返回打开失败 返回创建失败 第 12 页 共 36 页 图 2.6创建几何体模型的简要流程图 图 2.6 主要介绍的是模型的建立的简要流程图,当一个模型建立好后,渲染效果决定 模型的成功与否,模型的渲染是 directx 中非常重要的部分。渲染效果决定了模型的构成 方式,在模型渲染之前还可以进行多种立体效果处理,灯光,纹理,材质,坐标转换,雾 化,雨化,雪化等效果处理,给人更加逼真的效果。这些效果处理将在后面的章节中做专 门深入的讲解。由此可见,本文的关键在于模型的建立和贴图的效果处理,模型构成原理 已在前面介绍,模型的构成方式是多种的,几种模型根据数据的实际数据构成,经过比较 筛选,确定一种合适的模型构建思路,下面是两种建立模型思路的比较。 2.3.3 两种模型的对比两种模型的对比 根据上面的模型产品剖析,对雷达反射率的显示应用了解。对模型的建立构成,采取 的手段也是多种方式,不管建立什么样的模型,最基本的也是最重要的就是如何建立好点, 只有把点建立好后,才能构成线,进而构成面,最后构成体,这个总体的基本思路是不会 改变的。因此立体锥面模型点的构成方式就成了本文的重点。不管采取什么样的手段建立 模型,都必须首先把点建立好,下面介绍几种建立模型的方法: 图 2.7立体锥面投影确定点坐标 确定好各个点的坐标后,最主要的就是点的连接方式,在 direct3d 中,点的坐标连 接方式总共有点列表(pointlist),线列表(linelist),线条纹(linestrips),三角 形列表(tranglelists),三角形条纹(trianglestrips),三角形扇(trianglefans) 方位角 (theta) 气象目标高度 仰角(fi) 结束,返回 第 13 页 共 36 页 六种连接方式,根据我们需要,我们在这里选择了三角形条纹进行了点的连接,连接时应 该注意的是点的存放顺序也对最后的图形效果有影响,为了便于后面的贴图处理,我们必 须把我们所建立的几何体模型构成一个封闭的曲面, 第一种方法,利用锥面在平面上的投影来确定锥面的位置,雷达能探测的最远距离为 m_c,则雷达所能探测的高度(z 坐标)为: m_z = m_c * sin(fi)(2-1) 其中仰角 fi 在一定范围变化,由雷达的体扫数据给出。雷达目标物在水平面的坐标 (x,y)坐标方程为: m_x = m_c * cos(fi) * cos(theta)(2-2) m_y = m_c * cos(fi) * sin(theta)(2-3) 根据式 1,2,3 可以确定锥面几何体模型的位置坐标。假定某一个定值仰角,就模型的构 成来说,可以设置最远距离为 512km。直接运用最远距离的圆的点,将圆分为四十等分, 即由四十个 theta 值,将最远一圈的数据构成的点,直接与圆心连接,就构成了一个锥面 模型,其实现代码如下: float fi =2*d3dx_pi/6; a = c * cosf(fi); b = c * sinf(fi); pvertices2cnt.position = d3dxvector3( a*cosf(theta), b, a*sinf(theta) ); 经过上面简短程序,可以构成的点如图 2.8,其点的连接方式,可以以线列表的方式 构成连接如图 2.7,可以以三角形带列图构成如图 2.10,如果填充模式不是以线框模式填 充,而以实体模式填充,则构成锥面如图 图 2.8第一种模型点模式 第 14 页 共 36 页 图 2.9第一种模型线列表模式 图 2.10第一种模型三角形带列表模式 图 2.11第一种模型实体填充效果图 经过上面的图形,清楚发现各个模型的由点到线再到面的整个过程。立体锥面的终于 构成,仔细想下便知,数据的构成形式每公里 8 个点,每一个 cut 上有 600 个径向,这是 一个相当庞大的数据,而第一种模型就一概而论。将整个图形全部应用到立体锥面中,当 观察者需要知道某个距离确切位置上点的雷达回波信息时,那就会时一件非常麻烦的事, 为了对雷达立体锥面模型的距离做一个标定,因此,必须考虑另外一种立体锥面模型,更 适用于现代气象观察中。 第二种模型建立的方案是考虑到距离,也即是考虑到了对某个具体位置的雷达回波信 息进行参照,经过考虑,用于本研究在径向立体锥面的径向距离上选用了 5 个径向距离, 也就是将 512km 用 4 个距离段来表示,每个距离段代表 128km,当然这个距离划分越细 越好,经度越高,应用价值也越高。假设仰角为某一定值,方位角上仍然划分 40 等分, 对于每个点的确定仍然可以用式 1,2,3 来表示,在代码中需要主要的是,在径向距离上 第 15 页 共 36 页 多了几次循环。其第二种模型的主要程序部分如下: int iradialpoint = 5; /雷达所能探测的最大点。 int cnt = 0; pvertices2cnt.position=d3dxvector3( 0, 0, 0 ); cnt+; for( dword i=0; ilightenable( 0, true );/打开灯光 第 19 页 共 36 页 g_pd3ddevice-setrenderstate( d3drs_lighting, true ); /灯光着色方式 g_pd3ddevice-setrenderstate( d3drs_ambient, 0xf0f0f000 );/最后,打开一些 ambient(散射光) 2.5.2 材质效果材质效果 在真实的自然环境中,每种物质表面都具有不同的材质。比如镜子,会在阳光下反射 强烈的光线,而木质的家具在光线下又显得比较温和。物体的材质决定了物质的表面如何 对光线做出反应,如何反射光线,包括如何进行镜面反射和如何进行漫反射;在高光部分 如何反射光线;是否会自己发出光线。 如果没有定义物体的材质,那么 direct3d 场景中即使有光源,但是物体没有反射任何 的光线,那么物体将会是仍然一片漆黑。因此,需要在 direct3d 场景中使用灯光,几何体 模型必须指定材质,才能显示出理想中颜色和光照效果。 跟灯光效果类似,在使用材质之前需要定义材质的结构,设置物体镜面反射的颜色和 透明度,设置物体漫反射的颜色和透明度,设置高光部分的颜色和透明度,使用者可以根 据自己的实际模型所需进行取舍和调整。材质结构变量中包括 diffuse,ambient,specular,emissive,power,pmaterial 成员。diffuse 表示材质反射的 光线颜色;ambient 表示物体漫反射光线的颜色;specular 表示次啊之高光部分发射什么颜色, 也就是反射光线最多的,最亮的部分反射什么颜色的光线;emissive 表示材质表面发出光 线的颜色;power 表示材质的高光部分反射的光线强度值;pmaterial 是指向材质的指针。使 用了材质效果后,与灯光效果结合起来,与实际效果接近一步。下面给出了一个红色材质 例子程序: d3dmaterial9 mtrl; :zeromemory( mtrl.diffuse.r = mtrl.ambient.r = 1.0f; /反射光多能工物体漫反射光都为红色 mtrl.diffuse.g = mtrl.ambient.g = 0.0f; mtrl.diffuse.b = mtrl.ambient.b = 0.0f; mtrl.diffuse.a = mtrl.ambient.a = 1.0f; g_pd3ddevice-setmaterial( /设置材质 2.5.3 3d 转换效果转换效果 前面介绍了3d的转换原理,在direct3d中主要包括世界坐标系转换,透视转换,观察 坐标系转换。接下来我们一一介绍,透视转换决定了观察摄像机的镜头属性。比如观察的 水平范围角度和垂直范围角度,从什么距离开始到什么距离结束的范围内的场景可以被观 察到,下面是透视转换的一个例子程序: d3dxmatrixa16 matproj; /定义矩阵结构 d3dxmatrixperspectivefovlh( /使用该函 数完成透视转换,观察角度的幅度值是d3dx_pi/4,从观察点位置前1个坐标单位到100个坐标 第 20 页 共 36 页 单位范围内的3d世界可以被观察到。 g_pd3ddevice-settransform( d3dts_projection, /函数调用完成转换 观察坐标系转换可以实现改变观察者的观察方向和观察位置的功能。在 3d 游戏中,当 你通过键盘和鼠标控制模型在 direct3d 世界中变化时,这个功能就是通过观察坐标系转换 实现的。下面是观察坐标系转换的一个例子程序: d3dxvector3 veyept( m_xpos, m_ypos,-m_zpos); /眼睛位置,观察者在三维坐标中的坐 标; d3dxvector3 vlookatpt( 0.0f, 0.0f, 0.0f ); /观察的方向, d3dxvector3 vupvec( 0.0f, 1.0f, 0.0f ); /相对于观察者上方的方向 d3dxmatrixa16 matview; /定义矩阵结构 d3dxmatrixlookatlh( /观察坐标转换 g_pd3ddevice-settransform( d3dts_view, /调用函数完成转换 世界坐标系转换可以实现物体在 direct3d 坐标系中位置的改变。模型中所有的运动物 体都是通过进行世界坐标系转换不断的连续改变坐标位置而产生运动的效果。在 direct3d 中使用坐标系转换非常方便。如下例程序: d3dxmatrix matworld;/定义矩阵结构 d3dxmatrixrotationyawpitchroll(/将物体在z的正方向移动10个坐 标单位 g_pd3ddevice-settransform( d3dts_world, /调用函数,完成转换 2.5.4 模型控制模型控制 模型控制是 direct3d 中必不可少的组成部分,如果我们所建立的模型失去了控制,就 如游戏成了电影,只能观看,而不能切身体会,也就失去了它的魅力所在。为了让模型与 使用者能够更加紧密联系,我们必须加入简单的控制操作,让使用者能够从各个角度看到 我们的模型特征和径向信息。通过键盘事件触发 windows 消息处理函数,让 windows 响 应键盘控制操作。 有了键盘控制操作,我们可以通过按键切换模型的填充模式(线框模式/实体模式) , 可可以 keydown()事件,设置不同的虚拟键,改变世界坐标转换中的坐标值,让模型绕 x,y,z 轴一定角度旋转,还可以改变观察坐标系中的坐标值,让观察者从不同的视角观 察同一模型。以上只是通过 windows 事件处理键盘消息,同理,还可以处理鼠标操作;有 了这些使用者的操作控制后,让使用者跟模型更加密切,有了相互沟通的桥梁,因此,外 界控制是 direct3d 世界中必不可少的工具。以下是模型控制代码: switch( nchar ) case 0x57:/“w“ m_nrotatex += 2; /每次沿x坐标旋转2度 第 21 页 共 36 页 case 0x4d: / m m_bearth = !m_bearth; /是否绘制大地,切换键 break; case 0x43: / c通过判定,切换立体锥面模型的填充方式是线框模式还是实体模式 m_bwireframe = !m_bwireframe; g_pd3ddevice-setrenderstate( d3drs_fillmode, m_bwireframe? d3dfill_wireframe : d3dfill_solid ); break; case b: m_busetexture = !m_busetexture; /通过按键切换是否使用纹理效果 break; render();/渲染(其他directx效果处理进行调用) cview:onkeydown(nchar, nrepcnt, nflags); 本研究用到的主要效果处理就是以上几种效果处理,还有一种重要的纹理效果处理没 有涉及,将在后面章节结合根据体扫数据生成的纹理图片来讲述纹理效果,运用到实际的 例子中。除了上面提到的几种 directx3d 效果外,还有雾化,雨化,雪化及粒子系统等效 果。为了限制 direct3d 世界的可视距离,就需要加入雾化效果;用 3d 中的点列表或者线 列表则可以表示雨化效果。以上部分都是对模型本身的控制操作,并没有给立体锥面赋予 精美的表面纹理,与普通的几何体没有差别。为此,必须给出锥面模型的纹理,下面就将 介绍立体锥面几何体的纹理图像是如何生成的。 第 22 页 共 36 页 3 反射率产品图像反射率产品图像生成生成 3.1 反射率数据提取反射率数据提取 通过查阅相关雷达资料和雷达数据格式文档,该雷达体扫数据主要有三部分组成,站 址参数段,性能参数段和观测参数段。站址参数段主要包括站址信息,文件头的长度,站 址的站名,雷达的经纬度信息,天线的海拔高度,测站四周地物最大仰角,站址的最佳观 测仰角,以及站点编号等信息;而在雷达性能参数段主要包括天线增益,水平,垂直波束 宽度,极化状况,波长,雷达峰值功率,速度处理方式,地物处理方式等雷达性能进行设 置;在观测参数段就包含扫描方式,立体扫描层数,观测精确时间,开始 gps 时间,观测 要素,速度退模糊,脉冲重复频率,最大测速,最大测距,各层的仰角,一个径向中的数 据排列方式,一个强度,速度,谱宽占用的字节数,观察结束精确时间等信息。数据的存 放内容都严格按照数据格式存储。 根据雷达体扫数据的格式,解析对应部分的具体参数组成,在雷达扫描方式上要注意, 因为雷达的扫描方式不同将会带来产生的数据组成方式也不同,有些仰角只要强度信息, 而没有谱宽和速度信息,而有的仰角层扫描里却没有强度信息,要区分每个仰角层里究竟 包括了那些数据,必须对雷达的扫描方式了解。雷达的仰角和距离也很重要,这些数据通 过雷达体扫数据直接提供给用户,用户在后端的进行的开发二次产品,都是在这个数据可 信的基础上实施的;通过这两个因素以及方位角就能够准确地定位出哪一点的天气数据信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论