一种基于GPU的气象站点填图绘制方法
2018-02-25刘冰戴超
刘冰 戴超
摘要 本文结合OpenGL及GPU渲染管线技术,探讨了一种使用c++语言开发的支持MICAPS气象站点数据的GPU绘制方法。该方法基于GPU高速标绘技术,利用GPU的并行计算能力,使用顶点着色器和片断着色器,将站点数据进行网格化处理后进行绘制。实际工程应用结果表明,具有较高的图形图像显示速度,从而保证流畅的用户体验。
【关键词】气象站点填图 GPU编程 GL 着色器
随着自动气象站在全国各地广泛建设和投入,充分发挥气象观测站业务和社会效益,对气象站图形展示方式的直观性、清晰性和高效性提出更高要求。目前应用于气象业务及科研使用的图形处理系统有MICAPS系统、Fortan、GRADS、Surfer软件等。在绘图应用方面,黄天文[1]提出使用VC++的MFC库6 0版本开发气象地面填图系统;郭建民[2]利用Flash结合Asp开发区域气象资料填图WEB显示系统;扎西才让[3]等由Visual Basic6.0企业版,开发青海省自动气象站资料应用系统。从以上研究可以看出,气象站图形显示系统在业务工作中的广泛性。
本文结合OpenGL语言及GL着色器,探讨了支持MICAPS(含第一类、第二类和第三类数据)气象站点数据的GPU绘制方法。该方法使用c++语言开发,具有原生程序所特有的速度快、系统资源需求低的优点。此外,GPU作为显卡的“大脑”,使用GPU并行化绘图方法,可显著提高图形图像显示速度,从而保证流畅的用户体验。
1 气象站点填图数据
气象站点填图数据包括三大类,分别为地面全要素填图数据、高空全要素填图数据及通用填图数据。气象站点数据说明见表1。
2 GPU渲染管线
GPU在硬件设计上采用许多简单的流处理器,减少原本用于复杂逻辑控制和缓存管理的晶体管,用以增加并行处理单元和存储控制单元。与CPU相比,GPU的优势为强大的并行处理能力和高效率的数据传输能力。与CPU相同,GPU也可以用任意的指令序列进行编程,执行你可以想象得到的任何计算。在现代GPU上,图形运算中常见的运算操作执行速度非常快。通常情况下,最快的操作是标量和向量的乘法和加法,以及他们的组合,如乘加和点乘运算。其他如倒数、平方根、正弦、余弦、指数、对数运算,往往导致开销增大,但依然相当快捷。纹理操作非常高效。
GPU渲染管线处理流程如图1所示。其中顶点着色器和片断着色器是完全可编程的。
2.1 可编程顶点着色器
顶点着色器可以对每个顶点进行诸如变换和变形在内的很多操作,提供了修改、创建、忽略顶点属性(包括颜色、法线、纹理坐标和位置)的功能。它是完全可编程的,由vertexshader完成。输入与输出一一对应,即一个顶点被处理后仍然是一个顶点,各顶点间的处理相互独立,可以并行完成。
2.2 可编程片断着色器
片断着色器主要作用是进行像素处理,让复杂的着色方程在每一个像素上执行。它是完全可编程的,由geometry shader完成。输入和输出不是一一对应,一个图元被处理后可以生成O个或者多个图元,各图元处理也是相互独立的。本阶段输出一个新的图元流。
2.3 固定功能胶水
在顶点着色器和片断着色器之间,仍然保留的一些固定功能阶段,作为粘贴两种着色器的胶水,包括裁剪阶段、光栅化等阶段。
3 网格化数据设计
考虑不同站点的同一类型填图数据显示的内容包含相同的要素,同时每一种要素使用的绘制方式均相同,包括位置、气象现象、显示颜色、旋转等效果。设计使用网格数据进行数据存储。数据结构设计见表2。
4 GPU绘制实现方法
制作RGBA格式的天气符号纹理贴图。考虑到站点填图使用的气象符号共200余类,以像素为单位设计使用纹理贴图大小为1024*1024,每个符号大小为32*32。根据纹理贴图计算每个符号在纹理贴图上的纹理坐标,为便于对气象符号纹理坐标进行管理,可使用xml配置文件建立气象符号与纹理坐标间的索引。依据实际显示效果要求,也可设计多幅纹理贴图。
利用GPU绘制技术,实现气象站点填图功能的处理流程如图2所示。
具体过程包含以下步骤:
(1)数据预处理:解析天气填图数据并数据网格化处理;
(2)着色器:
首先,使用glewlnit()初始化环境;
其次,使用glCreateShader()创建顶点和片段着色器对象。同时,使用gIShaderSource()指定着色器文本。OpenGL着色器语言(GLSL)可以方便地用于顶点和片段着色器。
第三,使用glCompileShader()编译着色器。可以通过glGetShaderiv和glGetShaderInfoLog查询编译是否成功及编译失败所产生的错误信息。
(3)程序对象:程序对象作为着色器对象的容器使用,把它们链接到一个可执行文件。
首先,使用glCreateProgram()创建程序对象:
其次,使用glAttachShader()把着色器对象粘附到程序对象中。
(4)建立标绘数据的数组,包括顶点数组和顶点索引数组。同一类型气象填图数据的不同站点数据中包含多个标绘数据,每个标绘数据以顶點数组的数据格式进行存储。标绘数据的数据格式见表2。顶点索引数组对应每一个顶点数据,绘制时提交顶点数据的时候,直接指定顶点索引,顶点索引会一一映射到顶点数据,这样就消除了冗余的顶点数据,以更加灵活的方式进行渲染;
(5)创建顶点缓冲对象(VBO)。从CPU端向GPU端一次性提交所有绘制数据,将顶点数据存放在图像显卡的内存中;同时,用户可根据VBO用途,制定性能提示参数,OpenGL根据该提示,尽可能将数据放置在性能最优的内存中(显存、AGP内存或者CPU内存);
(6)创建索引缓冲对象(IBO),存储顶点索引数据;
(7)绑定程序对象。使用glUseProgram绑定程序对象,使用gIGetUniformLocation和glUniformlf等函数传入参数数据;
(8)利用OpenGL的可编程渲染管线技术,使用着色器语言( GLSL)的vertex顶点和fragment片元着色器处理。其中,顶点着色器操作的是顶点,基本任务是产生顶点位置gl_Position;片元着色器用于计算输出片元的颜色gl_Color;将顶点着色器和片段着色器载入到显卡的存储单元在图形流水线中使用GPU执行,完成绘制处理;
(9)绘制流程结束时,需要释放开辟使用的各种内存资源。避免资源过度开销。
5 显示效果
在加载包含国境线、道路、行政地名、地物等地图数据的矢量地图上,绘制2006年04月12日05时的全球地面全站点(Micaps第一类数据)要素显示效果如图3所示。首次上图显示用时不超过Is,在不同比例尺下对地图进行漫游、缩放操作时,响应时间均不超过lS。
6 结束语
随着计算机功能及气象探索方法技术含量的提升,人们能获取气象信息的途径和方法日益增多,同时气象信息的图形显示技术也越来越重要。本文使用基于GPU的高性能标绘技术,探讨了支持MICAPS气象站点数据的绘制方法。实际工程应用结果表明,具有较高的图形图像显示速度,从而保证流畅的用户体验。文中详细描述了GPU使用步骤,对软件开发者有一定的参考价值。
参考文献
[1]黄天文,焦飞.基于vc++的气象地面填图系统的设计与实现[J].现代计算机(专业版),2006 (04):105 -107.
[2]郭建民,区域气象观测资料Flash填图[J].宁夏农林科技,2012,53 (09):122-123.
[3]扎西才让,高顺年,徐亮等.青海省自动气象站资料应用系统[J].青海科技,2004 (04): 58-60.
[4]李世丹,陈星豪,一种基于OpenGL的图形渲染加速方法[J].电脑知识与技术,2012,8 (01):194-196.
[5]卢风顺,宋君强,银福康等.CPU/GPU协同并行计算研究综述[J].计算机科学,2011,38 (03): 5-9.
[6]吴恩华,图形处理器用于通用计算的技术、现状及其挑战[J],软件学报,2004,15 (10):1493-1504.
[7]张琪,付飞译.OpenGL超级宝典(第四版)[M].北京:人民邮电出版社,2010.
[8] Akenine-Moller T,Hanies E,HoffmanN. Real-Time Rendering, ThirdEdition[J].Cre Press,2008.
[9]段同樂,刘文展,刘海娟.基于GPU的大批量目标高速标绘技术研究[J].计算机 与网络,2015 (11):48-50.
[10]张志明,牟海波.基于GPU的战场态势实时处理与显示技术优化[J].指挥控制与仿真,2017 (06): 39.