• 
    

    
    

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

      ?

      基于GB2312標(biāo)準(zhǔn)的GL Studio漢化技術(shù)

      2020-02-07 13:33:48王志樂董軍宇
      關(guān)鍵詞:漢化字庫(kù)字符

      王志樂,董軍宇

      (1.海軍航空大學(xué)青島校區(qū),山東 青島 266041; 2.中國(guó)海洋大學(xué)信息科學(xué)與工程學(xué)院,山東 青島 266100)

      0 引 言

      隨著現(xiàn)代飛機(jī)綜合顯示信息量越來越大[1],國(guó)內(nèi)外對(duì)綜合航電顯示系統(tǒng)的開發(fā)應(yīng)用,開始借助國(guó)外的一些專業(yè)儀表工具軟件如GL Studio[2]、IData[3]等。這些軟件工具提供了文本框控件,實(shí)現(xiàn)了可視化編輯多功能顯示器(MFD)的顯示菜單和文本信息,然而由于漢字無(wú)法根據(jù)輸入直接顯示在MFD的畫面上,因此所有的做法只能是對(duì)于漢字采用紋理貼圖進(jìn)行顯示?;贕L Studio開發(fā)的機(jī)載儀表顯示軟件,如MFD、HUD等普遍采用此方法[4],但開發(fā)時(shí)無(wú)法預(yù)見需要顯示多少漢字,再加上漢字詞組的可變性,每次開發(fā)都需要重新準(zhǔn)備貼圖、詞組和顯示菜單的開發(fā),所以此方法非常繁瑣,且擴(kuò)展性不好[5]。開發(fā)人員一直期待GL Studio能夠支持漢字顯示,但是從2.0版本到現(xiàn)在的6.0版本一直都無(wú)法很好地支持,對(duì)此有必要進(jìn)行專門的研究。本文提出利用GB2312編碼建立一級(jí)漢字字庫(kù),基于GL Studio環(huán)境建立字庫(kù)表和基本的漢字顯示單元、MFD接收輸入的漢字編碼解析出每個(gè)漢字的國(guó)標(biāo)編碼,以基本漢字顯示單元為基礎(chǔ)建立漢字動(dòng)態(tài)顯示控制模型,經(jīng)過實(shí)驗(yàn)表明,該方法快速有效,擴(kuò)展性和重構(gòu)性好[6],既可以用于實(shí)裝開發(fā)也可以用于仿真模擬器的開發(fā)。

      1 GL Studio開發(fā)環(huán)境

      GL Studio是DISTI公司推出的一款獨(dú)立平臺(tái)的快速原型開發(fā)工具,用來創(chuàng)建實(shí)時(shí)的、照片級(jí)的、可交互的圖形顯示軟件,既可用于仿真,又可用于實(shí)際裝備[7]。GL Studio生成的C++和OpenGL代碼可以獨(dú)立運(yùn)行,也可以嵌入到其他應(yīng)用中[8],避免了底層OpenGL開發(fā)的細(xì)節(jié)[9-10]。利用GL Studio進(jìn)行MFD開發(fā)的流程如圖1所示。

      圖1 GL Studio的MFD開發(fā)流程

      2 漢字字庫(kù)數(shù)據(jù)建立

      利用GB2312編碼建立一級(jí)漢字字庫(kù),需要按照漢字編碼順序建立紋理字庫(kù),機(jī)載MFD顯示的漢字字符基本顏色是綠色,字體是黑體,字號(hào)是18號(hào),因此貼圖按此機(jī)載基本信息建立,為便于GL Studio的開發(fā)利用,漢字貼圖采用1024×1024的像素尺寸。在GL Studio中需要根據(jù)GB2312漢字編碼順序,建立漢字字庫(kù)表,該表用于查找需要顯示的漢字,將該漢字編碼輸入給漢化顯示控制模型[11-12]。

      2.1 字庫(kù)表結(jié)構(gòu)

      首先,建立漢字字庫(kù)表的抽象結(jié)構(gòu)如下:

      struct WORDS_TABLE_TYPE

      {//漢字表的結(jié)構(gòu)

      unsigned short code; //漢字國(guó)標(biāo)編碼

      float pos_x; //漢字存放的行

      float pos_y; //漢字存放的列

      };

      WORDS_TABLE_TYPE gt_wordsTableA[3000];

      實(shí)際一級(jí)字庫(kù)大概3000多漢字,按照此結(jié)構(gòu)和數(shù)量建立字庫(kù)表gt_wordsTableA,該表以數(shù)組形式存儲(chǔ)。

      2.2 字庫(kù)表建立

      漢字在計(jì)算機(jī)中的存儲(chǔ)占2 Byte,是用4位16進(jìn)制數(shù)表示其編碼,例如“啊”的國(guó)標(biāo)編碼是B0A1,在GL Studio環(huán)境下直接將漢字字符輸入后自動(dòng)轉(zhuǎn)換成16進(jìn)制的國(guó)標(biāo)編碼是A1B0,因此建立字庫(kù)表需要對(duì)輸入的漢字進(jìn)行高低字節(jié)調(diào)換,同時(shí)需要存儲(chǔ)每個(gè)漢字在貼圖中的坐標(biāo)位置。因此建立字庫(kù)表初始化函數(shù)CHWordsADrawString(unsigned short *str, unsigned short length);其中str存放貼圖中的每一行漢字,length表示每行漢字?jǐn)?shù)。

      實(shí)例使用如下:CHWordsADrawString((unsigned short*)"啊阿埃挨哎……",50);實(shí)例的字庫(kù)表N-S表示如圖2所示。

      圖2 字庫(kù)表N-S圖

      3 MFD漢化顯示模型設(shè)計(jì)

      在開發(fā)或者仿真階段對(duì)MFD中需要顯示的漢字、詞組具有不確定性[13],需要建立一個(gè)動(dòng)態(tài)控制和顯示的模型。要求既能夠滿足MFD字符顯示的實(shí)時(shí)性,又能比較節(jié)約系統(tǒng)的資源[14],提高GL Studio中顯示單元管理的效率。

      3.1 漢化框架設(shè)計(jì)

      MFD顯控漢化框架采用GL Studio環(huán)境,主要包括:漢字字庫(kù)表初始化、漢字輸入、增加漢字處理、漢字顯示處理。漢字字庫(kù)表初始化在軟件初始化階段調(diào)用字庫(kù)表初始函數(shù)CHWordsADrawString完成一級(jí)字庫(kù)所有漢字國(guó)標(biāo)編碼的存儲(chǔ);漢字輸入,需要根據(jù)輸入給MFD的漢字的編碼識(shí)別出漢字;增加漢字處理,確定輸入的編碼是漢字,則調(diào)用AddOneCHWord函數(shù),將輸入的漢字信息存儲(chǔ)到漢字結(jié)構(gòu)體容器中;在漢字顯示處理階段,利用GLPolygon[15]初始創(chuàng)建的幾何對(duì)象GL_CHWords_A_U復(fù)制新的對(duì)象,在新復(fù)制的幾何對(duì)象內(nèi)加載漢字表貼圖,然后根據(jù)存儲(chǔ)漢字信息的容器查找需要顯示的漢字和該漢字在貼圖中顯示的位置,移動(dòng)貼圖使該漢字顯示在新復(fù)制的幾何對(duì)象內(nèi),最后根據(jù)漢字在MFD上顯示的屏幕坐標(biāo)位置,將新復(fù)制的GLPolygon對(duì)象移動(dòng)到正確的屏幕坐標(biāo)位置。

      3.2 漢字抽象模型

      在MFD屏幕上新增加一個(gè)漢字時(shí),將進(jìn)入增加漢字處理模塊,在該模塊中需要將漢字的信息存儲(chǔ)在Vector定義的漢字結(jié)構(gòu)體對(duì)象中[16],因此需要對(duì)漢字處理信息進(jìn)行抽象定義。表1和表2是基本信息,表3是漢字顯示信息的處理結(jié)構(gòu)。

      表1 字符間距結(jié)構(gòu)體

      結(jié)構(gòu)體類型類型變量名說明FONT_STboolfonts字符類型shortchwordStep中文字符間距shortenwordStep英文字符間距

      表2 字符特征結(jié)構(gòu)體

      結(jié)構(gòu)體類型類型變量名說明TRAIT_STshortcolor顏色類型shortpat線型shortblink閃爍shortrot旋轉(zhuǎn)FONT_STfonts間距結(jié)構(gòu)

      表3 漢字顯示信息存儲(chǔ)結(jié)構(gòu)

      結(jié)構(gòu)體類型類型變量名說明DISP_CH_STfloatgrapPosXfloatgrapPosYfloatglPosXfloatglPosYTRAIT_STtrait漢字在字庫(kù)表中的坐標(biāo)漢字在MFD中的坐標(biāo)字符特征

      DISP_CH_ST抽象模型存放了輸入漢字字符在字庫(kù)表中的坐標(biāo)位置和用于顯示漢字的GLPolygon對(duì)象在MFD中的顯示坐標(biāo)。

      3.3 漢化顯示控制模型

      漢字顯示控制模型完成輸入漢字的查找、特征處理、顯示信息處理和實(shí)時(shí)顯示[17],所有的過程是動(dòng)態(tài)實(shí)時(shí)完成,因此建立漢字的動(dòng)態(tài)控制模型和動(dòng)態(tài)顯示模型是關(guān)鍵。

      3.3.1 控制模型

      利用GLPolygon預(yù)先創(chuàng)建好一個(gè)對(duì)象,如GL_CHWords_A_U,在該對(duì)象的屬性Texture Chooser里選擇一級(jí)字庫(kù)貼圖,如圖3所示。通過Texture Placement工具模式移動(dòng)貼圖,使GL_CHWords_A_U初始顯示第一行、第一列漢字“啊”。將該對(duì)象生成Group,如GL_CHWords_UGroup,漢字顯示基本對(duì)象及組如圖4所示。MFD顯示軟件運(yùn)行時(shí)首先完成清屏,接收到后臺(tái)發(fā)送的漢字字符指令時(shí)[18-19],完成指令解析后查找字庫(kù)表gt_wordsTableA,找到對(duì)應(yīng)的漢字字符后再完成漢字顯示信息的處理,將處理結(jié)果存儲(chǔ)在m_chwordAPosition對(duì)象中,該對(duì)象定義如下:std::vector m_chwordAPosition;最后基于GL_CHWords_A_U對(duì)象和m_chwordAPosition存儲(chǔ)的漢字信息動(dòng)態(tài)創(chuàng)建新的漢字顯示對(duì)象GLPolygon,將該對(duì)象加入組GL_CHWords_UGroup。

      為了節(jié)省創(chuàng)建GLPolygon對(duì)象的資源,選擇將新創(chuàng)建的對(duì)象加入GL_CHWords_UGroup組,每個(gè)周期清屏?xí)r將GL_CHWords_UGroup組內(nèi)所有對(duì)象不可見,如果新接收的后臺(tái)漢字字符的數(shù)目大于GL_CHWords_UGroup組內(nèi)GLPolygon對(duì)象,則再創(chuàng)建新的GLPolygon,否則利用GL_CHWords_UGroup組內(nèi)已有對(duì)象即可。

      圖3 添加一級(jí)字庫(kù)紋理

      圖4 漢字顯示基本對(duì)象及組

      漢字處理控制模型的流程圖如圖5所示。

      圖5 漢字處理控制模型

      3.3.2 顯示模型

      顯示模型主要完成漢字在MFD屏幕坐標(biāo)的顯示[20]。顯示模型主要包括2個(gè)方面:1)需要根據(jù)MFD屏幕尺寸,建立屏幕坐標(biāo)系,根據(jù)漢字輸入的相對(duì)坐標(biāo)信息計(jì)算屏幕顯示坐標(biāo)信息;2)根據(jù)控制模型在字庫(kù)表中查找的漢字,記錄下漢字在字庫(kù)表中的坐標(biāo),即行號(hào)和列號(hào),這也是漢字在貼圖中的行號(hào)與列號(hào),最后需要根據(jù)行號(hào)和列號(hào)移動(dòng)貼圖,使每一個(gè)GLPolygon對(duì)象正確地顯示輸入的漢字。

      以某型飛機(jī)多功能顯示器(MFD)為例,屏幕有效分辨率為575×575,符號(hào)顯示以像素點(diǎn)為單位。在屏幕左下方和右上方分別創(chuàng)建GLPolygon對(duì)象,該對(duì)象盡可能小,以該對(duì)象的幾何中心作為屏幕的左下坐標(biāo)和右上坐標(biāo)[21],如圖6所示,將這2個(gè)對(duì)象作為坐標(biāo)系的基準(zhǔn)點(diǎn),對(duì)象名為GL_Position_LeftBottom_U、GL_Position_RightTop_U,其中以GL_Position_LeftBottom_U為坐標(biāo)系原點(diǎn),坐標(biāo)基準(zhǔn)對(duì)象定義如圖7所示。設(shè)屏幕寬度為rWidth,輸入的橫坐標(biāo)為rx、縱坐標(biāo)為ry,返回的GL Studio環(huán)境下絕對(duì)坐標(biāo)為resX、resY。resX的計(jì)算方法如下:

      TopPointX=m_posRightTopPoint.x

      BottomPointX=m_postLeftBottomPoint.x

      rWidth=TopPointX-BottomPointX

      resX=BottomPointX+rx×rWidth/575.0

      同樣的方法可計(jì)算出縱坐標(biāo)resY。

      圖6 建立MFD屏幕坐標(biāo)系

      圖7 坐標(biāo)基準(zhǔn)對(duì)象定義

      為便于對(duì)新建字符對(duì)象的管理,定義了存放新建漢字對(duì)象GLPolygon類型的容器std::vectorm_veChGroup;利用該對(duì)象和m_chwordAPosition對(duì)象設(shè)計(jì)漢字顯示模型[22-23]。為便于模型的描述,對(duì)一些關(guān)鍵變量和函數(shù)作如下描述:

      int numPoly=m_veChGroup.size();

      int numDisp=m_chwordAPosition.size();

      ChangeHTexture(m_veChGroup.at(li_i),0.02f,0.0f,50.0f,m_chwordAPosition.at(li_i).grapPosX,0);

      ChangeVTexture(m_veChGroup.at(li_i),0.02f,0.0f,50.0f,m_chwordAPosition.at(li_i).grapPosY,0.0f);

      漢字顯示處理模型如圖8所示。

      圖8 漢字顯示處理模型

      4 仿真應(yīng)用分析

      該仿真方法基于GL Studio 4.0以上版本開發(fā)的MFD和HUD已成功應(yīng)用于某型飛機(jī)模擬器,運(yùn)行該軟件的機(jī)器采用PowerPC、內(nèi)存1 GB、顯卡為NVIDIA GeForce9300的硬件條件下,漢化顯示和位置準(zhǔn)確無(wú)誤,后臺(tái)可以根據(jù)需要修改顯示的內(nèi)容,并且控制實(shí)時(shí)性好。圖9和圖10是該型模擬器顯控運(yùn)行部分效果圖,主菜單、JIDS和慣導(dǎo)測(cè)試指令的形式如表4所示。

      表4 指令輸入格式

      MFD指令編碼幀Byte主菜單20100000c002ffffc0030000c006…2010642JIDS2010…b01700030032000b0056002f…828慣導(dǎo)2010…b01700010225005b844db017…1489

      MFD接收后臺(tái)的指令編碼,指令編碼都是16進(jìn)制,0x2010表示指令幀開始,0x2000表示幀結(jié)束,中間每4位表示一個(gè)漢字的國(guó)標(biāo)編碼或者是自定義符號(hào)編碼,測(cè)試過層每個(gè)畫面所有漢字和符號(hào)占用字節(jié)不超過2048 Byte,數(shù)據(jù)量適合基本的網(wǎng)絡(luò)通信和共享內(nèi)存,可以方便地和后臺(tái)系統(tǒng)通信。

      圖9 漢化顯示主菜單

      圖10 漢化顯示慣導(dǎo)

      5 結(jié)束語(yǔ)

      本文基于GB2321編碼建立漢字字庫(kù),在GL Studio環(huán)境下進(jìn)行機(jī)載綜合航電顯示控制系統(tǒng)的開發(fā),可以很快地實(shí)現(xiàn)顯示字符的漢化,而且不需要專門預(yù)先搜集MFD可能顯示的漢字及詞組,避免了傳統(tǒng)方法不能靈活修改顯示詞組的缺點(diǎn),解決了根據(jù)需求顯示漢化字符信息的難點(diǎn),也解決了DISTI公司推出的GL Studio平臺(tái)長(zhǎng)期不能支持漢字顯示的問題,為該平臺(tái)用于國(guó)產(chǎn)機(jī)載MFD和模擬器開發(fā)提供了技術(shù)手段。該模型適用于任何機(jī)型MFD的開發(fā),而且可以推廣到基于OpenGL環(huán)境或IDATA平臺(tái)進(jìn)行MFD的開發(fā)。

      猜你喜歡
      漢化字庫(kù)字符
      老年人口腔健康自我效能量表的漢化及信效度檢驗(yàn)
      尋找更強(qiáng)的字符映射管理器
      基于語(yǔ)料庫(kù)的清末民初日源外來詞漢化研究
      No.2 喜茶聯(lián)合漢儀字庫(kù)推出微型書和書簽
      字符代表幾
      一種USB接口字符液晶控制器設(shè)計(jì)
      電子制作(2019年19期)2019-11-23 08:41:50
      消失的殖民村莊和神秘字符
      某型號(hào)產(chǎn)品的字庫(kù)遷移優(yōu)化設(shè)計(jì)
      電子世界(2018年7期)2018-04-26 08:51:35
      遼西地區(qū)慕容鮮卑漢化的考古學(xué)觀察
      相同字庫(kù)條件下激光打印文件特征的變化規(guī)律和特點(diǎn)
      肥乡县| 新化县| 保山市| 苍溪县| 舞钢市| 阳西县| 乡宁县| 安远县| 错那县| 日照市| 天津市| 宜城市| 永济市| 邛崃市| 泽州县| 洛阳市| 民和| 平安县| 东辽县| 洱源县| 乌拉特前旗| 城市| 郯城县| 灵寿县| 江都市| 金昌市| 盐山县| 曲松县| 九龙坡区| 上蔡县| 和林格尔县| 京山县| 永仁县| 敖汉旗| 岗巴县| 湟中县| 政和县| 平潭县| 永新县| 浮梁县| 巨野县|