• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于OpenGL的電子戰(zhàn)綜合顯控系統(tǒng)設(shè)計(jì)

      2010-06-28 03:04:36
      艦船電子對抗 2010年4期
      關(guān)鍵詞:跨平臺控系統(tǒng)繪圖

      方 旭

      (船舶重工集團(tuán)公司723所,揚(yáng)州225001)

      1 傳統(tǒng)電子戰(zhàn)綜合顯控系統(tǒng)中存在的問題

      傳統(tǒng)的電子戰(zhàn)綜合顯控系統(tǒng)經(jīng)過了許多年的發(fā)展和完善,技術(shù)相對成熟,應(yīng)用比較廣泛。隨著電子戰(zhàn)發(fā)展的需要,既往技術(shù)也顯示出許多局限性,存在一些難以解決的問題。

      (1)目標(biāo)顯示能力差

      通常在一個態(tài)勢圖上只能提供兩維的信息,一個目標(biāo)有許多必須的、有很強(qiáng)相關(guān)性的參數(shù),由于受到顯示技術(shù)的限制,難以集成到一個面板中去,往往需要提供多個面板,讓用戶在各個面板之間進(jìn)行頻繁的切換,甚至在幾個機(jī)柜之間通過操作員直接交流的方式來實(shí)現(xiàn)相互溝通,才能完整描述出當(dāng)前的戰(zhàn)場環(huán)境,傳統(tǒng)方式很難讓用戶滿意。需要提供一種實(shí)時性與表現(xiàn)力更強(qiáng)的顯控系統(tǒng),幫助指揮員更好地了解戰(zhàn)場周圍狀況,從而提供更好的戰(zhàn)術(shù)決策支持。

      (2)負(fù)載不均衡

      現(xiàn)在計(jì)算機(jī)通常都配備了多核CPU和強(qiáng)大的顯卡。CPU體系結(jié)構(gòu)仍然以32位為主,64位的還少,而主流的顯卡位寬都達(dá)到了256位。完全基于CPU運(yùn)算所實(shí)現(xiàn)的顯控系統(tǒng),由于傳統(tǒng)編程方式的限制,所有的圖形處理都是由單個CPU獨(dú)自完成的,常常是CPU忙于復(fù)雜的圖形繪制操作,CPU占用率不斷地提高,而256位寬的顯卡卻很空閑,明顯負(fù)載不均衡。

      (3)難以跨平臺移植

      傳統(tǒng)的綜合顯控系統(tǒng)是針對具體的硬件、操作系統(tǒng)平臺進(jìn)行開發(fā)的。但是由于各個平臺之間存在很大的差異性,難以實(shí)現(xiàn)跨平臺移植。特別是Window s不開放源代碼,用它來開發(fā)軍品項(xiàng)目存在難以預(yù)測的安全問題。如何便于跨平臺移植,將基于Windows的軟件移植到其它更加安全的系統(tǒng)上,也是開發(fā)過程中需要考慮的重要問題。

      2 基于OpenGL的綜合顯控系統(tǒng)解決方案

      為了解決上述問題,作者認(rèn)為可以應(yīng)用Open-GL技術(shù)實(shí)現(xiàn)電子戰(zhàn)綜合顯控系統(tǒng)。

      2.1 關(guān)于OpenGL

      OpenGL是一個跨編程語言、跨平臺的圖形硬件編程接口規(guī)范,是行業(yè)領(lǐng)域中最為廣泛接納的2D/3D圖形應(yīng)用編程接口(API)。在最新發(fā)布的OpenGL 2.1版本中包含了700多個獨(dú)立的圖形操作函數(shù)(核心庫中約有650個,輔助函數(shù)約50個),開發(fā)者可以利用這些函數(shù)來構(gòu)造景物模型,進(jìn)行交互式三維圖形應(yīng)用軟件的開發(fā)。

      一個與OpenGL相關(guān)的系統(tǒng)結(jié)構(gòu)為:最底層是圖形硬件,第2層為操作系統(tǒng),第3層為窗口系統(tǒng),第4層為OpenGL,第5層為應(yīng)用程序。

      OpenGL專注于圖形處理的各個方面,在設(shè)計(jì)時充分考慮到了平臺的獨(dú)立性,在實(shí)現(xiàn)時不依賴于任何窗口系統(tǒng)或操作系統(tǒng)。OpenGL在很多硬件平臺上都提供了具體的實(shí)現(xiàn),移植時只需要變更底層的窗口操作,而不需要進(jìn)行太多的變動。這種設(shè)計(jì)理念可以幫助我們在不同的平臺(如Windows、Unix、Linux 、Mac OS 、OS/2)之間進(jìn)行移植。

      在OpenGL中,只能使用5種基本的幾何圖元(點(diǎn)、線、三角形、四邊形、多邊形)。雖然沒有提供用于描述復(fù)雜三維物體(如汽車、人體、飛機(jī))的高級函數(shù),但是可以用基本的圖元來構(gòu)造出任意復(fù)雜的物體,靈活性強(qiáng),便于軟件開發(fā)人員控制。

      已經(jīng)有一些商業(yè)公司以及開源組織以O(shè)penGL為基礎(chǔ)構(gòu)筑了Open Inventor、Cosmo3D、Optimizer等多種高級圖形庫,提供了眾多預(yù)定義的對象,開發(fā)人員也可以直接利用它們來快速構(gòu)造自己的系統(tǒng)模型。

      2.2 OpenGL工作流程

      當(dāng)繪圖命令傳遞給OpenGL后,OpenGL需要進(jìn)行一系列的運(yùn)算操作才能最終在屏幕上顯示出來。這一系列的過程稱為OpenGL渲染流水線。

      圖中頂點(diǎn)數(shù)據(jù)和象素?cái)?shù)據(jù)為兩種OpenGL支持的原始數(shù)據(jù)。頂點(diǎn)數(shù)據(jù)包括模型的頂點(diǎn)集、線集、多邊形集,用來描述幾何模型。這些數(shù)據(jù)經(jīng)過運(yùn)算器、逐個頂點(diǎn)操作、圖元裝配等。Pixel data則包括像素集、影像集、位圖集等。

      兩種不同類型的數(shù)據(jù)經(jīng)過流水線進(jìn)行各自的處理后,最后都經(jīng)過紋理裝配、光柵化、逐個片元操作直至把光柵數(shù)據(jù)寫入幀緩沖器。

      流水線上關(guān)鍵的處理階段如下:

      (1)顯示列表

      顯示列表中暫存了想要執(zhí)行的繪圖命令序列。

      (2)運(yùn)算器

      提供了一種根據(jù)頂點(diǎn)(控制點(diǎn))導(dǎo)出描述曲面的方法。這種方法是一種多項(xiàng)式映射,能夠根據(jù)頂點(diǎn)生成法向量、紋理坐標(biāo)和空間坐標(biāo)值。

      (3)逐個頂點(diǎn)操作

      將頂點(diǎn)轉(zhuǎn)換為圖元,需要使用4×4的浮點(diǎn)數(shù)矩陣進(jìn)行變換,將三維空間坐標(biāo)投影到屏幕上。

      (4)圖元裝配

      對幾何體中位于半空間之外的部分進(jìn)行裁剪,對幾何物體做投影除法,使得遠(yuǎn)處的物體看起來比近處的物體小。

      (5)像素操作

      像素操作首先將系統(tǒng)內(nèi)存的像素?cái)?shù)組進(jìn)行拆封,從某種格式轉(zhuǎn)換為合適數(shù)目的分量;接下來對數(shù)據(jù)進(jìn)行縮放、偏移和像素映射;然后將得到的數(shù)據(jù)進(jìn)行截取,并將其寫入紋理內(nèi)存或發(fā)送給光柵化操作進(jìn)行處理。

      (6)紋理裝配

      可以將紋理圖案粘貼到幾何物體上,提供物體的真實(shí)感。

      (7)光柵化

      將幾何數(shù)據(jù)和像素?cái)?shù)據(jù)轉(zhuǎn)換為片元。每個片元都對應(yīng)于幀緩存中的一個像素。這個階段確定了每個片元的顏色和深度值。

      (8)逐個片元操作

      這個階段首先進(jìn)行紋理映射、霧計(jì)算、裁剪測試、模板測試和深度測試,然后執(zhí)行混合、拌動、邏輯運(yùn)算和屏蔽,最后處理完成的片元被送到幀緩沖器中顯示。

      2.3 OpenGL與Direct 3D的比較

      在Window s平臺上,微軟提出了自己的三維圖形開發(fā)庫Direct3D,并且伴隨著Windows操作系統(tǒng)的不斷普及,應(yīng)用范圍也相當(dāng)廣泛,為三維圖形開發(fā)提供了新的手段。OpenGL成為目前三維圖形開發(fā)事實(shí)上的工業(yè)標(biāo)準(zhǔn),被許多顯卡硬件所支持。兩者在競爭中不斷地完善與發(fā)展。

      OpenGL和Direct3D都以經(jīng)典的流水線方式來處理圖像渲染工作,流水線中核心模塊都通過硬件直接支持,提升了渲染性能。

      Direct3D是基于微軟的組件對象模型(COM)的三維圖形API。開發(fā)人員基于COM的客戶端、服務(wù)端對象進(jìn)行面向組件的編程,簡化了整個程序的設(shè)計(jì)。可是,COM技術(shù)本身就是一項(xiàng)非常復(fù)雜的技術(shù),學(xué)習(xí)COM開發(fā)的周期相當(dāng)長,對于新加入的開發(fā)人員難以很快地上手。由于Direct3D是微軟的商業(yè)產(chǎn)品,無法查看實(shí)現(xiàn)的源代碼,許多底層的實(shí)現(xiàn)細(xì)節(jié)問題開發(fā)人員很難接觸到,系統(tǒng)查錯和性能調(diào)優(yōu)困難。OpenGL是一個過程式的三維圖形API,主要基于傳統(tǒng)的C語言進(jìn)行過程式開發(fā),在程序中使用頭文件包含和動態(tài)鏈接庫等傳統(tǒng)技術(shù)。執(zhí)行流程非常清晰,靈活性強(qiáng),系統(tǒng)查錯和性能調(diào)優(yōu)容易。

      Direct3D必須由系統(tǒng)硬件支持,不支持純軟件的仿真。而OpenGL可以支持軟件仿真,不是簡單地報(bào)錯或是退出。雖然微軟為了推廣Direct3D系統(tǒng),已經(jīng)宣布不再支持新版本的OpenGL??墒鞘褂瞄_源項(xiàng)目mase3D可以在不支持最新OpenGL版本的Windows機(jī)器上,利用底層的GDI庫來模擬仿真出OpenGL的全部功能,方便進(jìn)行移植工作。

      Direct3D僅能用于Windows系列平臺。OpenGL可以支持多種操作系統(tǒng)平臺。支持多種操作系統(tǒng)平臺,這對于開發(fā)軍品項(xiàng)目是非常必要的。

      Direct3D包含圖形、聲音、輸入、網(wǎng)絡(luò)等各種多媒體模塊。OpenGL只是圖形函數(shù)庫。

      微軟對 Direct3D的更新非常頻繁。OpenGL規(guī)范較Direct3D更加嚴(yán)謹(jǐn),版本更新少,版本更新中新增技術(shù)少。OpenGL 3.1是2009年3月Khronos Group公布的最新版本,業(yè)界圖形廠商很快予以了大力支持。AMD、NVIDIA、S3 Graphics的顯卡驅(qū)動目前都已經(jīng)支持OpenGL 3.0。

      3 基于OpenGL的綜合顯控系統(tǒng)的開發(fā)

      由于微軟不再更新OpenGL的實(shí)現(xiàn),只能遵循OpenGL 1.1標(biāo)準(zhǔn)來構(gòu)造系統(tǒng)。

      3.1 Windows的OpenGL結(jié)構(gòu)

      OpenGL是 client/server結(jié)構(gòu),即 client(用OpenGL繪制景物的應(yīng)用程序)向 server(OpenGL內(nèi)核)發(fā)出OpenGL命令,server解釋這些命令。所以,OpenGL可以十分方便地在網(wǎng)絡(luò)環(huán)境下使用。OpenGL體系結(jié)構(gòu)見圖1。

      圖1 OpenGL體系結(jié)構(gòu)

      OpenGL被封裝在Windows的動態(tài)鏈接庫OpenGL32.DLL中??蛻魬?yīng)用程序調(diào)用的Open-GL命令依次在OpenGL32.DLL、WINSRV.DLL、Win32的設(shè)備驅(qū)動接口(DDI)中處理,最后經(jīng)過處理的圖形命令被送給顯卡設(shè)備驅(qū)動程序。

      3.2 在微軟基礎(chǔ)類庫(MFC)中使用OpenGL

      在MFC框架中,可以很容易地使用OpenGL。以下給出基本步驟:

      (1)包含必要的頭文件

      為了能夠支持OpenGL,在工程中必須包含GL.H、GLU.H和GLAUX.H三個頭文件。將頭文件包含放在預(yù)定義頭文件stdafx.h中,可以減少多次包含工作。MFC庫自動將所需的導(dǎo)入庫OpenGL32.lib和GLu32.lib以及靜態(tài)鏈接庫GLaux.lib包含到鏈接選項(xiàng)中,不必手工增加這些鏈接庫。

      (2)增加并創(chuàng)建渲染環(huán)境

      在Windows環(huán)境下,繪圖操作是在窗口的設(shè)備環(huán)境(Device Context)上進(jìn)行操作的。在使用OpenGL時,需要提供一個渲染環(huán)境,系統(tǒng)通過渲染環(huán)境將所有的OpenGL調(diào)用命令連接到設(shè)備環(huán)境上。這里聲明了渲染環(huán)境變量m_hRC,并在創(chuàng)建視圖的同時初始化了渲染環(huán)境。

      在MFC的視圖窗口創(chuàng)建成功后,需要設(shè)置窗口像素格式。在結(jié)構(gòu)體pfd中設(shè)置標(biāo)志位dwFlags為PFD_DRAW_TO_WINDOW(支持窗口設(shè)備繪制),PFD_SUPPORT_OPENGL(支持 OpenGL),PFD_DOUBLEBUFFER(支持雙緩沖技術(shù)),iPixel-Type為PFD_TYPE_RGBA,給出指定的色彩深度cColorBits、深度緩存cDepthBits以及其他必要的參數(shù)設(shè)置。然后調(diào)用 ChoosePixelFormat和 Set-PixelFormat來設(shè)置窗口像素格式。接著調(diào)用wgl-CreateContext創(chuàng)建一個和設(shè)備環(huán)境相適應(yīng)的渲染環(huán)境m_hRC。最后調(diào)用wglMakeCurrent關(guān)聯(lián)設(shè)備環(huán)境和渲染環(huán)境。

      (3)調(diào)整窗口大小

      第一次繪制視圖或者改變視圖大小時,需要重新設(shè)置渲染模型。glViewport重設(shè)當(dāng)前視口的范圍,glMatrixMode指定不同的坐標(biāo)轉(zhuǎn)換矩陣,gl-LoadIdentity重置當(dāng)前矩陣。

      (4)繪圖操作

      實(shí)際的繪圖操作放在OnDraw成員函數(shù)中。glClear清除屏幕內(nèi)容和深度緩存,glLoadIdentity重置當(dāng)前的模型觀察矩陣。glBegin和glEnd封裝一組相關(guān)的頂點(diǎn)序列、定義幾何圖元。

      為了保證充分利用OpenGL直接操縱硬件繪圖,不應(yīng)該使用設(shè)備環(huán)境進(jìn)行繪圖。

      (5)清理環(huán)境

      程序退出時,需要釋放系統(tǒng)資源,再次調(diào)用wglMakeCurrent分離渲染環(huán)境窗口設(shè)備環(huán)境,wglDeleteContext釋放渲染環(huán)境。凡是在繪制過程中創(chuàng)建出的系統(tǒng)資源(包括二次曲面、樣條曲線、紋理對象、顯示列表等),都需要在退出時被釋放。

      3.3 GDI繪圖與OpenGL繪圖結(jié)果比較

      這里給出GDI繪圖及OpenGL繪圖產(chǎn)生的電子戰(zhàn)綜合顯控系統(tǒng)屏幕截圖,如圖2和圖3所示??梢钥闯?圖3比圖2具有更強(qiáng)的表現(xiàn)力,顯示效果更好。

      圖2 GDI繪制的綜合顯控系統(tǒng)態(tài)勢圖

      圖3 OpenGL繪制的綜合顯控系統(tǒng)態(tài)勢圖

      4 總結(jié)

      綜上所述,針對傳統(tǒng)綜合顯控系統(tǒng)中存在的問題,可用基于OpenGL的綜合顯控系統(tǒng)得到解決。

      4.1 提高了系統(tǒng)的表現(xiàn)能力

      利用OpenGL技術(shù)可以在一個界面中集成盡可能多的參數(shù)信息,可以賦予一種仿真的、三維的并且具有實(shí)時交互能力的態(tài)勢顯示,可以在三維圖形世界中用以前不可想象的手段來獲取目標(biāo)的信息以及分析周圍環(huán)境的狀況。

      4.2 實(shí)現(xiàn)了負(fù)載均衡

      通用計(jì)算的發(fā)展趨勢是中央處理單元(CPU)和繪圖處理單元(GPU)的整合。需要復(fù)雜條件控制的、只能串行處理的任務(wù)適合于CPU承擔(dān)。GPU定位為CPU的協(xié)處理器,大量數(shù)據(jù)并行計(jì)算的任務(wù)適合于GPU承擔(dān)。

      圖形渲染適合于并行處理,CPU實(shí)際上難以勝任圖形渲染任務(wù)。GPU編程以流式編程模型為基礎(chǔ),這種并行處理允許高效計(jì)算和通信。

      OpenGL系統(tǒng)能夠?qū)⒗L圖命令直接轉(zhuǎn)換為底層顯卡的硬件指令,在整個繪圖過程中無需CPU的加入,充分利用了顯卡的性能,實(shí)現(xiàn)了負(fù)載均衡。

      4.3 解決了跨平臺移植難題

      在基于OpenGL的綜合顯控系統(tǒng)實(shí)現(xiàn)過程中,不需要編寫直接訪問底層操作系統(tǒng)的繪圖代碼,只需要利用OpenGL提供的標(biāo)準(zhǔn)API函數(shù),便可以實(shí)現(xiàn)與設(shè)備無關(guān)的操作,提高了編程效率。如果需要跨平臺移植,只需要更改與平臺相關(guān)部分的代碼——窗口管理。對核心的繪圖操作,只要底層的顯卡能夠支持OpenGL,則無需修改。解決了平臺間移植的難題,同時也解決了Windows操作系統(tǒng)的不安全問題。

      [1]Dave Shreiner,Mason Woo,Jackie Neider,Tom Davis.OpenGL Programming Guide Sixth Edition[M].Massachusetts:Addison-Wesley,2007.

      [2]丁藝明,劉波.利用GPU進(jìn)行高性能數(shù)據(jù)并行計(jì)算[J].程序員,2008(4):97-99.

      猜你喜歡
      跨平臺控系統(tǒng)繪圖
      來自河流的你
      中國三峽(2022年7期)2022-12-02 05:28:02
      “禾下乘涼圖”繪圖人
      關(guān)于DALI燈控系統(tǒng)的問答精選
      聯(lián)調(diào)聯(lián)試中列控系統(tǒng)兼容性問題探討
      跨平臺APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
      基于HTML5 Canvas繪圖技術(shù)應(yīng)用
      電子測試(2018年4期)2018-05-09 07:28:32
      一種新型列控系統(tǒng)方案探討
      Surfer和ArcView結(jié)合在氣象繪圖中的應(yīng)用
      河北遙感(2015年2期)2015-07-18 11:11:14
      基于QT的跨平臺輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
      基于OPC跨平臺通信的電機(jī)監(jiān)測與診斷系統(tǒng)
      图木舒克市| 林西县| 图们市| 棋牌| 九江县| 菏泽市| 公安县| 湘阴县| 林芝县| 伊吾县| 巴彦县| 郑州市| 郎溪县| 贵南县| 含山县| 濮阳县| 黄冈市| 连平县| 江门市| 巴东县| 额尔古纳市| 黑河市| 河东区| 酒泉市| 玉溪市| 兴安县| 延津县| 永吉县| 清涧县| 邵东县| 抚州市| 曲阳县| 武定县| 宁海县| 扶余县| 轮台县| 汝州市| 巴彦淖尔市| 丹棱县| 腾冲县| 洪泽县|