劉冰 戴超
摘要 本文結(jié)合OpenGL及GPU渲染管線技術(shù),探討了一種使用c++語言開發(fā)的支持MICAPS氣象站點數(shù)據(jù)的GPU繪制方法。該方法基于GPU高速標(biāo)繪技術(shù),利用GPU的并行計算能力,使用頂點著色器和片斷著色器,將站點數(shù)據(jù)進行網(wǎng)格化處理后進行繪制。實際工程應(yīng)用結(jié)果表明,具有較高的圖形圖像顯示速度,從而保證流暢的用戶體驗。
【關(guān)鍵詞】氣象站點填圖 GPU編程 GL 著色器
隨著自動氣象站在全國各地廣泛建設(shè)和投入,充分發(fā)揮氣象觀測站業(yè)務(wù)和社會效益,對氣象站圖形展示方式的直觀性、清晰性和高效性提出更高要求。目前應(yīng)用于氣象業(yè)務(wù)及科研使用的圖形處理系統(tǒng)有MICAPS系統(tǒng)、Fortan、GRADS、Surfer軟件等。在繪圖應(yīng)用方面,黃天文[1]提出使用VC++的MFC庫6 0版本開發(fā)氣象地面填圖系統(tǒng);郭建民[2]利用Flash結(jié)合Asp開發(fā)區(qū)域氣象資料填圖WEB顯示系統(tǒng);扎西才讓[3]等由Visual Basic6.0企業(yè)版,開發(fā)青海省自動氣象站資料應(yīng)用系統(tǒng)。從以上研究可以看出,氣象站圖形顯示系統(tǒng)在業(yè)務(wù)工作中的廣泛性。
本文結(jié)合OpenGL語言及GL著色器,探討了支持MICAPS(含第一類、第二類和第三類數(shù)據(jù))氣象站點數(shù)據(jù)的GPU繪制方法。該方法使用c++語言開發(fā),具有原生程序所特有的速度快、系統(tǒng)資源需求低的優(yōu)點。此外,GPU作為顯卡的“大腦”,使用GPU并行化繪圖方法,可顯著提高圖形圖像顯示速度,從而保證流暢的用戶體驗。
1 氣象站點填圖數(shù)據(jù)
氣象站點填圖數(shù)據(jù)包括三大類,分別為地面全要素填圖數(shù)據(jù)、高空全要素填圖數(shù)據(jù)及通用填圖數(shù)據(jù)。氣象站點數(shù)據(jù)說明見表1。
2 GPU渲染管線
GPU在硬件設(shè)計上采用許多簡單的流處理器,減少原本用于復(fù)雜邏輯控制和緩存管理的晶體管,用以增加并行處理單元和存儲控制單元。與CPU相比,GPU的優(yōu)勢為強大的并行處理能力和高效率的數(shù)據(jù)傳輸能力。與CPU相同,GPU也可以用任意的指令序列進行編程,執(zhí)行你可以想象得到的任何計算。在現(xiàn)代GPU上,圖形運算中常見的運算操作執(zhí)行速度非???。通常情況下,最快的操作是標(biāo)量和向量的乘法和加法,以及他們的組合,如乘加和點乘運算。其他如倒數(shù)、平方根、正弦、余弦、指數(shù)、對數(shù)運算,往往導(dǎo)致開銷增大,但依然相當(dāng)快捷。紋理操作非常高效。
GPU渲染管線處理流程如圖1所示。其中頂點著色器和片斷著色器是完全可編程的。
2.1 可編程頂點著色器
頂點著色器可以對每個頂點進行諸如變換和變形在內(nèi)的很多操作,提供了修改、創(chuàng)建、忽略頂點屬性(包括顏色、法線、紋理坐標(biāo)和位置)的功能。它是完全可編程的,由vertexshader完成。輸入與輸出一一對應(yīng),即一個頂點被處理后仍然是一個頂點,各頂點間的處理相互獨立,可以并行完成。
2.2 可編程片斷著色器
片斷著色器主要作用是進行像素處理,讓復(fù)雜的著色方程在每一個像素上執(zhí)行。它是完全可編程的,由geometry shader完成。輸入和輸出不是一一對應(yīng),一個圖元被處理后可以生成O個或者多個圖元,各圖元處理也是相互獨立的。本階段輸出一個新的圖元流。
2.3 固定功能膠水
在頂點著色器和片斷著色器之間,仍然保留的一些固定功能階段,作為粘貼兩種著色器的膠水,包括裁剪階段、光柵化等階段。
3 網(wǎng)格化數(shù)據(jù)設(shè)計
考慮不同站點的同一類型填圖數(shù)據(jù)顯示的內(nèi)容包含相同的要素,同時每一種要素使用的繪制方式均相同,包括位置、氣象現(xiàn)象、顯示顏色、旋轉(zhuǎn)等效果。設(shè)計使用網(wǎng)格數(shù)據(jù)進行數(shù)據(jù)存儲。數(shù)據(jù)結(jié)構(gòu)設(shè)計見表2。
4 GPU繪制實現(xiàn)方法
制作RGBA格式的天氣符號紋理貼圖??紤]到站點填圖使用的氣象符號共200余類,以像素為單位設(shè)計使用紋理貼圖大小為1024*1024,每個符號大小為32*32。根據(jù)紋理貼圖計算每個符號在紋理貼圖上的紋理坐標(biāo),為便于對氣象符號紋理坐標(biāo)進行管理,可使用xml配置文件建立氣象符號與紋理坐標(biāo)間的索引。依據(jù)實際顯示效果要求,也可設(shè)計多幅紋理貼圖。
利用GPU繪制技術(shù),實現(xiàn)氣象站點填圖功能的處理流程如圖2所示。
具體過程包含以下步驟:
(1)數(shù)據(jù)預(yù)處理:解析天氣填圖數(shù)據(jù)并數(shù)據(jù)網(wǎng)格化處理;
(2)著色器:
首先,使用glewlnit()初始化環(huán)境;
其次,使用glCreateShader()創(chuàng)建頂點和片段著色器對象。同時,使用gIShaderSource()指定著色器文本。OpenGL著色器語言(GLSL)可以方便地用于頂點和片段著色器。
第三,使用glCompileShader()編譯著色器??梢酝ㄟ^glGetShaderiv和glGetShaderInfoLog查詢編譯是否成功及編譯失敗所產(chǎn)生的錯誤信息。
(3)程序?qū)ο螅撼绦驅(qū)ο笞鳛橹鲗ο蟮娜萜魇褂茫阉鼈冩溄拥揭粋€可執(zhí)行文件。
首先,使用glCreateProgram()創(chuàng)建程序?qū)ο螅?/p>
其次,使用glAttachShader()把著色器對象粘附到程序?qū)ο笾小?/p>
(4)建立標(biāo)繪數(shù)據(jù)的數(shù)組,包括頂點數(shù)組和頂點索引數(shù)組。同一類型氣象填圖數(shù)據(jù)的不同站點數(shù)據(jù)中包含多個標(biāo)繪數(shù)據(jù),每個標(biāo)繪數(shù)據(jù)以頂點數(shù)組的數(shù)據(jù)格式進行存儲。標(biāo)繪數(shù)據(jù)的數(shù)據(jù)格式見表2。頂點索引數(shù)組對應(yīng)每一個頂點數(shù)據(jù),繪制時提交頂點數(shù)據(jù)的時候,直接指定頂點索引,頂點索引會一一映射到頂點數(shù)據(jù),這樣就消除了冗余的頂點數(shù)據(jù),以更加靈活的方式進行渲染;
(5)創(chuàng)建頂點緩沖對象(VBO)。從CPU端向GPU端一次性提交所有繪制數(shù)據(jù),將頂點數(shù)據(jù)存放在圖像顯卡的內(nèi)存中;同時,用戶可根據(jù)VBO用途,制定性能提示參數(shù),OpenGL根據(jù)該提示,盡可能將數(shù)據(jù)放置在性能最優(yōu)的內(nèi)存中(顯存、AGP內(nèi)存或者CPU內(nèi)存);
(6)創(chuàng)建索引緩沖對象(IBO),存儲頂點索引數(shù)據(jù);
(7)綁定程序?qū)ο?。使用glUseProgram綁定程序?qū)ο螅褂胓IGetUniformLocation和glUniformlf等函數(shù)傳入?yún)?shù)數(shù)據(jù);
(8)利用OpenGL的可編程渲染管線技術(shù),使用著色器語言( GLSL)的vertex頂點和fragment片元著色器處理。其中,頂點著色器操作的是頂點,基本任務(wù)是產(chǎn)生頂點位置gl_Position;片元著色器用于計算輸出片元的顏色gl_Color;將頂點著色器和片段著色器載入到顯卡的存儲單元在圖形流水線中使用GPU執(zhí)行,完成繪制處理;
(9)繪制流程結(jié)束時,需要釋放開辟使用的各種內(nèi)存資源。避免資源過度開銷。
5 顯示效果
在加載包含國境線、道路、行政地名、地物等地圖數(shù)據(jù)的矢量地圖上,繪制2006年04月12日05時的全球地面全站點(Micaps第一類數(shù)據(jù))要素顯示效果如圖3所示。首次上圖顯示用時不超過Is,在不同比例尺下對地圖進行漫游、縮放操作時,響應(yīng)時間均不超過lS。
6 結(jié)束語
隨著計算機功能及氣象探索方法技術(shù)含量的提升,人們能獲取氣象信息的途徑和方法日益增多,同時氣象信息的圖形顯示技術(shù)也越來越重要。本文使用基于GPU的高性能標(biāo)繪技術(shù),探討了支持MICAPS氣象站點數(shù)據(jù)的繪制方法。實際工程應(yīng)用結(jié)果表明,具有較高的圖形圖像顯示速度,從而保證流暢的用戶體驗。文中詳細(xì)描述了GPU使用步驟,對軟件開發(fā)者有一定的參考價值。
參考文獻
[1]黃天文,焦飛.基于vc++的氣象地面填圖系統(tǒng)的設(shè)計與實現(xiàn)[J].現(xiàn)代計算機(專業(yè)版),2006 (04):105 -107.
[2]郭建民,區(qū)域氣象觀測資料Flash填圖[J].寧夏農(nóng)林科技,2012,53 (09):122-123.
[3]扎西才讓,高順年,徐亮等.青海省自動氣象站資料應(yīng)用系統(tǒng)[J].青海科技,2004 (04): 58-60.
[4]李世丹,陳星豪,一種基于OpenGL的圖形渲染加速方法[J].電腦知識與技術(shù),2012,8 (01):194-196.
[5]盧風(fēng)順,宋君強,銀??档?CPU/GPU協(xié)同并行計算研究綜述[J].計算機科學(xué),2011,38 (03): 5-9.
[6]吳恩華,圖形處理器用于通用計算的技術(shù)、現(xiàn)狀及其挑戰(zhàn)[J],軟件學(xué)報,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的大批量目標(biāo)高速標(biāo)繪技術(shù)研究[J].計算機 與網(wǎng)絡(luò),2015 (11):48-50.
[10]張志明,牟海波.基于GPU的戰(zhàn)場態(tài)勢實時處理與顯示技術(shù)優(yōu)化[J].指揮控制與仿真,2017 (06): 39.