• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于GL Studio的虛擬儀器儀表設(shè)計(jì)與仿真

    2015-06-08 08:20:35孫艷麗王玲玲陳佳琪
    系統(tǒng)仿真技術(shù) 2015年2期
    關(guān)鍵詞:旋鈕示波器紋理

    孫艷麗,王玲玲,陳佳琪

    (1.海軍航空工程學(xué)院 基礎(chǔ)實(shí)驗(yàn)部,山東煙臺(tái)264001;2.海軍航空工程學(xué)院 控制工程系,山東煙臺(tái)264001)

    1 引 言

    近年來本科學(xué)員、在職培訓(xùn)及預(yù)選士官等教學(xué)任務(wù)逐年增大,但新參訓(xùn)人員直接操作容易因誤操作導(dǎo)致?lián)p壞設(shè)備,增大維修成本,而且有限設(shè)備無法同時(shí)供應(yīng)大量人員使用,使得耗時(shí)較長,通過仿真軟件開發(fā)虛擬儀器儀表是提高效率,解決院校實(shí)驗(yàn)教學(xué)、裝備培訓(xùn)、部隊(duì)操練的重要途徑。

    GL Studio是一個(gè)面向?qū)ο?,用于?chuàng)建實(shí)時(shí)的二維或三維、照片級(jí)交互式的圖形界面開發(fā)軟件。紋理工具可以導(dǎo)入數(shù)字照片,完成儀表仿真。GL Studio有內(nèi)建代碼生成器,把圖形設(shè)計(jì)器創(chuàng)建的文件生成可移植的VC代碼??蛇M(jìn)行人機(jī)互動(dòng),實(shí)時(shí)顯示儀表之間的動(dòng)態(tài)關(guān)聯(lián),效果直觀逼真[1-2]。GL Studio開發(fā)流程主要包括創(chuàng)建紋理、圖形界面設(shè)計(jì)、軟件設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)四大方面[3]。

    2 創(chuàng)建紋理

    紋理創(chuàng)建的好壞直接關(guān)系所創(chuàng)建虛擬儀表真實(shí)程度,紋理圖片的獲取是創(chuàng)建紋理的第一步,獲取紋理通常有兩種方法:① 用數(shù)碼相機(jī)直接拍攝真實(shí)的儀表,將所拍攝的照片經(jīng)過處理后作為紋理;② 用圖形編輯工具創(chuàng)建紋理[4]。目前,采用第一種方法獲得紋理比較常用。得到高質(zhì)量的實(shí)物照片后,去除照片中的背景,將所有能動(dòng)部件(如儀表盤上指針、動(dòng)態(tài)數(shù)字、開關(guān)、旋鈕、按鈕等)從主儀表板上逐個(gè)移除,并拷貝到新圖層中,最后保存紋理圖片。本文中根據(jù)不同需求電源柜的界面是由數(shù)碼照片處理而成,示波器的仿真則為了增強(qiáng)立體效果采用3dmax創(chuàng)建紋理。

    2.1 基于數(shù)碼照片的紋理創(chuàng)建

    制作的第一步就是要直接使用相機(jī)拍攝到其實(shí)物照片,并且在拍攝照片時(shí)一定要注意保持照相機(jī)的垂直,防止因拍攝角度的原因造成照片的傾斜,以至于最后影響到所制作的電源柜的真實(shí)度。其中需要一張電源控制柜的整體照片來作為背景。當(dāng)紋理圖片的像素太大時(shí),GL Studio軟件使用對(duì)象屬性窗口進(jìn)行添加紋理圖片時(shí)是無法顯示的??墒侨绻档蛨D片的像素,清晰度將會(huì)受到影響,本文中采取將圖片進(jìn)行分割的方法,這樣既保證了單張圖片像素不會(huì)太高,又兼顧了清晰度的問題。

    將面板圖片上所有能動(dòng)的部件給摳出來,并將所有狀態(tài)都拍攝下來,在拍攝完照片后使用Photoshop對(duì)電源柜的面板照片進(jìn)行處理,消除掉因?yàn)槿藶橐蛩厮斐傻恼掌瑑A斜、亮度不均勻等種種會(huì)影響到其真實(shí)度的問題。將所有摳下的各種小部件紋理圖片綜合放置于同一張紋理圖上,以避免各個(gè)部件的紋理圖片的比例不同,從而導(dǎo)致在后續(xù)的工作中需要頻繁地調(diào)整其大小。

    2.2 基于3ds max的示波器紋理創(chuàng)建

    在3ds max軟件界面中,畫出示波器圖片中線的截面,設(shè)置其路徑,使用放樣法制作線的三維模型。使用擠出法在3ds max中制作示波器上凸出的按鈕等。對(duì)于示波器上的金屬接口,設(shè)置其材質(zhì)為金屬。對(duì)于示波器的屏幕采用先分割平面再擠出的方法來制作,最后設(shè)置其紋理使其更接近于真實(shí)物體。取得用3ds max制作的示波器的立體模型的圖片,用Photoshop調(diào)整其大小使其能夠被GL Studio軟件使用的示波器虛擬儀器背景的紋理圖片,如果紋理圖片的像素過大的話則在GL Studio中是顯示不出來的。再將示波器上所有的按鈕以及旋鈕用Photoshop逐個(gè)將其摳下來,并將其拷貝到新的圖層上,獲得紋理圖片。

    3 圖形界面設(shè)計(jì)

    首先用 VC6.0 在 GL Studio 3.0 Standalone AppWizard中建立設(shè)計(jì)器,完成初始化,當(dāng) GL Studio初始化完畢后,GL Studio已經(jīng)生成了大量的代碼,包括三個(gè)文件,兩個(gè)源文件和一個(gè)頭文件。一個(gè)源文件是win_main.cpp,在該文件中有int WINAPI WinMain函數(shù),這是程序的入口函數(shù),該函數(shù)調(diào)用了另一個(gè)源文件里的int main(int argc,char*argv[])函數(shù),這個(gè)源文件的名字是根據(jù)用戶定義的工程的名字來定義[5]。同時(shí) GL Studio又定義了一個(gè)指針全局變量,名字也是工程的名字,該指針指向的類是glsDisplayFrame類的派生類,在 int main(int argc,char*argv[])中在堆上創(chuàng)建glsDisplayFrame類的派生類對(duì)象。在該類的構(gòu)造函數(shù)中做了一些初始化工作,然后調(diào)用Create();函數(shù),該函數(shù)用來產(chǎn)生程序窗口,具體如下:

    void testClass::Create(void)

    {

    theWindow=new OpenGLWindow(0,0,_width,_height,Name(),this);

    theWindow->end();

    theWindow->resizable(theWindow);

    BackgroundColor(255,255,255,255);

    FrameInterval(33333);

    theWindow->resize(0,0,_width,_height);

    theWindow->show();

    theWindow->make_current();

    }

    之后即可在GL Studio編輯器的設(shè)計(jì)窗口中利用工具欄中的創(chuàng)建工具和“所見即所得”的設(shè)計(jì)環(huán)境創(chuàng)建一個(gè)和電源柜背景圖像相似的圖形對(duì)象[6]。將經(jīng)過處理的控制柜的背景紋理圖片通過對(duì)象屬性窗口中的Texture窗口添加到當(dāng)前的圖形對(duì)象之中,并將其設(shè)置為當(dāng)前紋理。通過設(shè)計(jì)窗口上工具欄中的模式工具對(duì)紋理進(jìn)行調(diào)整,使其正好鋪滿圖形,在主控制窗口中給創(chuàng)建好的圖形對(duì)象命以恰當(dāng)?shù)拿郑员阌诟玫毓芾?、編輯?duì)象。除了設(shè)計(jì)畫布外,GL Studio設(shè)計(jì)器包含了分層視圖,在視圖中顯示所有設(shè)計(jì)中對(duì)象列表,以樹狀結(jié)構(gòu)顯示,如圖1所示。

    圖1 狀態(tài)設(shè)置圖Fig.1 State diagram

    根據(jù)背景紋理上各個(gè)所摳下的部件的形狀,再分別創(chuàng)建出與它們各自相近的圖形對(duì)象,依照對(duì)電源柜背景紋理的處理方法分別對(duì)其進(jìn)行處理,最后得到所要設(shè)計(jì)的圖形界面。

    在畫面中用到不少文本框,要實(shí)現(xiàn)文本框的數(shù)據(jù)、文本的改變,首先要把文本格式化到一個(gè)緩存里。設(shè)文本框指針名為firsttextgrid,要把數(shù)值100顯示在文本框里,可以首先創(chuàng)建一個(gè)屬性成員函數(shù),通過在CODE主窗口點(diǎn)右鍵添加即可實(shí)現(xiàn),此時(shí)會(huì)得到一個(gè)成員變量,只需要選定SET方法,然后輸入:

    int index=100;

    char buffer[10];

    sprintf(buffer,"%d",index);

    firsttextgrid->string(buffer);

    因?yàn)殡娫垂袷菃螌赢嬅?,只有一個(gè)Calculate()函數(shù),只要選擇classmenthods在Calculate()函數(shù)中調(diào)用剛才的SET方法,然后保存,生成代碼,編譯連接運(yùn)行,就可以在文本框中看到修改了的數(shù)據(jù)。

    產(chǎn)生窗口以后繪制的畫面,由函數(shù)CreateObjects()生成[7]。在該函數(shù)里,首先在堆上生成對(duì)象,該對(duì)象代表每個(gè)畫面中的控件,名字是用戶繪制畫面時(shí)候,在主控制面板中生成的名字。GL Studio根據(jù)繪制的對(duì)象不同,會(huì)生成從不同類中派生的對(duì)象,指針的定義已經(jīng)在頭文件中定義好,在CreateObjects()中,生成對(duì)象后調(diào)用該類成員函數(shù),產(chǎn)生畫面。該類成員函數(shù)的具體定義已經(jīng)封裝在GL Studio的動(dòng)態(tài)庫中,GL Studio會(huì)根據(jù)用戶繪制的畫面,把畫面的必要信息,如頂點(diǎn)顏色、頂點(diǎn)位置、名字、紋理大小等以參數(shù)的方式傳過去。GL Studio將根據(jù)這些參數(shù),自動(dòng)生成與用戶在畫布繪制的一樣的圖像。這就是GL Studio的所見機(jī)所得的工作機(jī)制。圖片繪制完畢后,進(jìn)入do-while語句,這個(gè)循環(huán)將不斷調(diào)用一個(gè)虛函數(shù)Calculate(),實(shí)現(xiàn)所有畫面的刷新,如圖2所示。

    圖2 各功能模塊的調(diào)用關(guān)系Fig.2 Call relationship of each function module

    在設(shè)計(jì)好圖形界面之后,依據(jù)實(shí)際面板的操作需要將各個(gè)控制部件創(chuàng)建成合適的裝置,工作方式開關(guān)創(chuàng)建成旋鈕,選中工作方式圖形對(duì)象,點(diǎn)擊工具欄中轉(zhuǎn)化工具的旋鈕裝置,如圖3所示。打開旋鈕裝置的對(duì)象屬性窗口,在Knob標(biāo)簽下,選擇General標(biāo)簽頂部的Angle Range,即角度范圍。設(shè)置旋鈕旋轉(zhuǎn)角度為0°~70°,即旋鈕旋轉(zhuǎn)的起始位置和終點(diǎn)位置,如圖4所示。

    圖3 轉(zhuǎn)化為旋鈕裝置Fig.3 Device into a knob

    圖4 設(shè)置旋轉(zhuǎn)范圍Fig.4 Set the rotation range

    之后設(shè)置起點(diǎn)和終點(diǎn)間的擋位,在Detents標(biāo)簽下的Number of Detents輸入框中填入數(shù)字“3”,即共有3個(gè)擋位,分別為“0”、“平時(shí)”、“忙時(shí)”?;瑒?dòng)Detent Positions的滑塊使每一擋位對(duì)應(yīng)合適的角度。在主控制窗口的代碼窗口中添加新變量。變量類型為float,名字設(shè)為_newRoll,初始值設(shè)為0.0f。最后在對(duì)象屬性窗口的Object Code欄的Initialization Code中輸入如下代碼:

    Self->DetentVal(1);∥旋鈕初始擋位為1

    在Event callback Code即事件回調(diào)代碼中寫入以下代碼:

    bool rval=false;

    if(ObjectEventIs(ev,"DetentVal"))

    {switch(rollGlsKnob-> DetentVal())

    {case1:

    _newRoll=0.0f;∥0°時(shí)為擋位 1

    break;

    case2:

    _newRoll=50.0f;∥50°時(shí)為擋位 2

    break;

    case3:

    _newRoll=70.0f;∥70°時(shí)為擋位 3

    break;

    }

    Rval=true;

    }

    Return rval;

    剩余的部件創(chuàng)建成按鈕裝置,在所有創(chuàng)建的GlsPushButton(按鈕裝置)對(duì)象的對(duì)象屬性窗口的Object Code窗口的Event callback Code即事件回調(diào)代碼中寫入以下代碼:

    chekonggui_click_value=self->State();

    return 0;

    其中 chekonggui處填寫每個(gè)對(duì)象各自的名字。

    在主控制窗口的代碼窗口的類變量中點(diǎn)擊Add將所有的GlsPushButton對(duì)象逐個(gè)添加進(jìn)去,在設(shè)定其類型為int,初始值為0。編寫行為代碼。

    4 軟件整體設(shè)計(jì)

    為了達(dá)到實(shí)現(xiàn)虛擬電源柜功能的目的,需要對(duì)圖形界面中的開關(guān)、旋鈕、按鈕、指示燈、屏幕以及指針等動(dòng)態(tài)的部件進(jìn)行控制,而這就需要在主控制窗口中的代碼窗口類方法的Calculate區(qū)域內(nèi)進(jìn)行編程來實(shí)現(xiàn)各部件的動(dòng)作,如圖5所示。

    圖5 軟件編程圖Fig.5 Software program

    5 編譯、鏈接和測試

    編程完成即可進(jìn)行電源柜的仿真,測試其是否滿足可正常工作,滿足設(shè)計(jì)要求。首先需要生成.h 和.cpp 文件,之后打開.dsp 文件,在 C++環(huán)境下對(duì)電源柜進(jìn)行測設(shè)。在.dsp文件中對(duì)電源柜進(jìn)行運(yùn)行,即可生成.exe可執(zhí)行文件。在.exe可執(zhí)行文件上按編寫的行為程序點(diǎn)擊按鈕,測試其功能是否正常,如圖6所示。

    圖6 示波器的測試Fig.6 Test of oscilloscope

    6 結(jié) 論

    經(jīng)過測試發(fā)現(xiàn)電源柜和示波器均能按照所編寫的行為程序動(dòng)作,能夠?qū)崿F(xiàn)使用虛擬儀器進(jìn)行院校裝備訓(xùn)練,實(shí)現(xiàn)提高效率、節(jié)省損耗的效果。

    [1] 于輝,趙經(jīng)成,付戰(zhàn)平.Gl Studio虛擬儀表技術(shù)應(yīng)用與系統(tǒng)開發(fā)[M].北京:國防工業(yè)出版社,2010.YU Hui,ZHAO Jingcheng,F(xiàn)U Zhanping.Gl Studio virtual instrument technology application and system development[M].Beijing:National Defence Industry Press,2010.

    [2] 張文,朱元昌,樊世友.Gl Studio及其在雷達(dá)面板仿真中的應(yīng)用[J].測控技術(shù),2012,21(12):50-53.ZHANG Wen,ZHU Yuanchang,F(xiàn)AN Shiyou.GL Studio and its application in the simulation of radar’s panels[J].Measurement& Control Technology,2012,21(12):50-53.

    [3] 崔小鵬,邵英,李萬.基于Gl Studio的電力監(jiān)控系統(tǒng)設(shè)計(jì)[J].船海工程,2011,40(2):122-124.CUI Xiaopeng,SHAO Ying,LI Wang.Design of power monitoring system based on GL studio[J].Ship & Ocean Engineering,2011,40(2):122-124.

    [4] Distributed Simulation Technology Inc.Gl Studio user’s guide,Version 1.04[R].[s.l.]:Distributed Simulation Technology Inc,2000.

    [5] 孫艷麗,李建海,王玲玲.基于GL的某型電源系統(tǒng)仿真設(shè)計(jì)[J].電子測量技術(shù),2014,37(2):1-3.SUN Yanli,LI Jianhai,WANG Lingling.Simulation of a certain type of power system based on GL Studio[J].Electronic Measurement Technology,2014,37(2):1-3.

    [6] 喬林,費(fèi)廣正.Visual C++高級(jí)編程技術(shù)——Open GL篇[M].北京:中國鐵道出版社,2000.QIAO Lin,F(xiàn)EI Guangzheng.Visual C++advanced programming technology——Open GL[M].Beijing:China Railway Publishing House,2000.

    [7] 沙俊名,劉澤乾,龐帥.基于Gl Studio的指揮儀模擬訓(xùn)練系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2011,11(12):2819-2823.SHA Junming,LIU Zeqian,PANG Shuai.The design and implementation of a director simulated training system based-on GL Studio[J].Science Technology and Engineering,2011,11(12):2819-2823.

    猜你喜歡
    旋鈕示波器紋理
    基于LDC1314芯片的電感式旋鈕控制系統(tǒng)設(shè)計(jì)
    日用電器(2021年8期)2021-09-13 03:17:38
    家用燃?xì)庠罹咝o溫升影響因素的研究
    日用電器(2021年7期)2021-08-17 02:49:28
    基于BM3D的復(fù)雜紋理區(qū)域圖像去噪
    軟件(2020年3期)2020-04-20 01:45:18
    使用紋理疊加添加藝術(shù)畫特效
    一款教學(xué)示波器的Y通道設(shè)計(jì)與實(shí)現(xiàn)
    電子制作(2017年13期)2017-12-15 09:00:08
    TEXTURE ON TEXTURE質(zhì)地上的紋理
    Coco薇(2017年8期)2017-08-03 15:23:38
    可攜帶式虛擬雙蹤示波器
    電子制作(2017年20期)2017-04-26 06:57:46
    消除凹凸紋理有妙招!
    Coco薇(2015年5期)2016-03-29 23:22:15
    金鐘碳素三腳架PRO GEO V640/V630
    大眾攝影(2015年7期)2015-07-01 18:04:25
    車用旋鈕力矩特性曲線研究
    汽車電器(2013年2期)2013-09-02 13:07:40
    寿光市| 蒲江县| 碌曲县| 科技| 囊谦县| 崇文区| 句容市| 淅川县| 高安市| 炎陵县| 江北区| 贺州市| 剑阁县| 汶上县| 保山市| 渝北区| 竹山县| 青州市| 白河县| 徐闻县| 庆元县| 宁安市| 阿尔山市| 苏尼特左旗| 舟山市| 固阳县| 三河市| 塘沽区| 南部县| 固镇县| 台东县| 胶州市| 延川县| 武宁县| 安西县| 克山县| 永川市| 淳安县| 玉林市| 尤溪县| 荣昌县|