《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于OpenGL構建的飛行仿真系統
基于OpenGL構建的飛行仿真系統
趙 穎1,唐紹軍2,李中華3
總后勤部后勤科學研究所,北京100071
摘要: 介紹了在Windows系統平臺及Visual C++ 6.0的MFC基礎類庫環境下,采用OpenGL技術與串口通信技術實現的飛行仿真系統的設計思想與程序實現方法。
Abstract:
Key words :

摘  要: 介紹了在Windows系統平臺及Visual C++ 6.0的MFC基礎類庫環境下,采用OpenGL技術與串口通信技術實現的飛行仿真系統的設計思想與程序實現方法。
關鍵詞: 虛擬現實  OpenGL  六維鼠標  串行口

  虛擬現實是一種創建和體驗虛擬世界的計算機系統。利用虛擬現實技術,計算機可以產生一個三維的虛擬環境,通過人的視覺、觸覺等作用于人[1]。 用戶以客觀世界的實際動作或以人類熟悉的方式操作虛擬系統,從而實現立體交互,使人產生身臨其境的感覺。虛擬現實系統一般由輸入設備、輸出設備、虛擬環境生成器和高性能的計算機系統四大部分構成。
  目前,OpenGL在虛擬現實領域是功能較強,最具發展前途的實現工具。OpenGL是美國高級圖形和高性能計算機系統公司(SGI)所開發的三維圖形庫,在當前已經成為事實上的高性能圖形和交互式視景處理的標準[2]。OpenGL是一個獨立的工作平臺,用它編寫的程序可以在不同的硬件平臺(如工作站或個人微機)中使用,也可以在多種操作系統(如Windows系列、OS/2等)下運行。
  經過近幾年來的發展,虛擬現實技術及設備被很多領域應用,而飛行仿真是最重要的應用領域之一。本文所研究的飛行仿真系統采用新型六維控制器(六自由度鼠標)作為輸入設備,監視器作為輸出設備,以OpenGL作虛擬環境生成器,構成一套高性能計算機處理系統來實現高度仿真的飛行模擬器運動。
1  構建應用程序框架
  應用Visual C++ 6.0建立一個基于MFC的應用程序框架,并將VC庫文件opengl32.lib、glu32.lib和glaux.lib包含在應用程序中。
  為使OpenGL函數庫的調用有效,首先應設置渲染窗口。OpenGL的渲染處理完全不同于Windows的圖形設備接口GDI。要使Windows的窗口格式為OpenGL所接受,需進行下列設置。
1.1 建立圖形操作描述表
  OpenGL作圖窗口必須設置為WM_CLIPSIBLINGS和WM_CLIPCHILDREN風格。
  在Windows98/2000系統下,窗口程序首先要處理設備描述表(Device Contexts,DC),它包括若干在窗口上如何顯示圖形的信息。而在OpenGL程序中,必須創建圖形操作描述表(Rending Context,RC),這是DC中專用于OpenGL的一種。但是RC不同于其他的DC,它只需要一個句柄就可以任意調用OpenGL函數,而其他DC調用每個GDI函數時都需要一個句柄。
  使用時先通過wglCreateContext()函數創建一個RC,然后調用wglMakeCurrent()函數啟動它,就可在所定義的窗口內調用OpenGL函數繪制飛行器了。
  m_pDC=new CClientDC(this);
  hrc=wglCreateContext(m_pDC->GetSafeHdc( ));
  wglMakeCurrent(m_pDC->GetSafeHdc( ),hrc);
1.2 設置像素格式
  像素格式指定設備的繪圖屬性,包括繪圖界面的顏色表示模式、顏色位數、累積緩存區、深度緩存區和模板緩存區的位數。每個OpenGL顯示設備都支持某一特定的像素格式。像素格式用PIXELFORMATDESCRIPTOR結構來表示,通過設置這一結構的成員值使之支持OpenGL。建立了圖形操作描述表并初始化PIXELFORMATDESCRIPTOR結構后,應以此結構為變量調用ChoosePixelFormat( )函數為設備描述表選擇像素格式,最后調用SetPixelFormat( )將其設置為當前像素格式。
  int pixelformat;
  pixelformat=ChoosePixelFormat(m_pDC->GetSafeHdc( ),&pfd);
  SetPixelFormat(m_pDC->GetSafeHdc( ),pixelformat,&pfd);
2  繪制場景
2.1 準備工作
  開始繪制場景之前,需要用背景顏色刷新顯存。飛行器在天空的背景中飛行,因此應將清除顏色緩沖區的顏色設為淡藍色,然后刷新顏色緩沖區和深度緩沖區。
  glClearColor(0.75,0.75,1.0,1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  準備工作還要考慮計算機屏幕是二維的,要用它顯示逼真的三維物體就要用到圖形變換技術。同時程序還要保證,當用戶隨意改變窗口大小時,飛行器不會變形失真。因此需要定義初始的坐標變換。視圖類的OnSize事件對這些問題進行處理。
2.2 設置光照效果
  創建三維立體的場景時,添加光線效果對于飛行器的真實感非常重要。OpenGL的光照模型將光照成分劃分為四個獨立的部分:發射光、環境光、散射光和鏡面反射光。OpenGL獨立計算這四種光照成分,然后將其結果疊加,從而得到最終的效果。
  設置光照應分二步進行。首先使用glLightfv( )函數設置光源的屬性和值,創建系統光源。本文定義了四個GLfloat數組sunposition、suncolor、sunambient和sunspecular,分別作為光源位置、光源的散射光亮度、環境光亮度和鏡面反射光亮度的屬性值。然后用glEnable(GL_LIGHTING)啟動OpenGL的光照處理功能。再用glEnable(GL_LIGHT0)打開設置的光源。
3  繪制飛行器
  飛行器是一個較為復雜的三維圖形對象,它需要使用二次曲面和多邊形鑲嵌工具來創作,并通過OpenGL的紋理映射技術給飛行器穿上漂亮的外衣。
3.1 飛行器構造原理
  按照組成飛行器對象的幾何形體的特點,可將飛行器構造用二次曲面(quadric)和多邊形(polygon)表示。具體來說,機頭用錐形表示;機體是柱形;尾部的發動機用錐形的柱體來表示;飛行器的頂棚可以用一個拉長的球體來表示,把球體的透明度設為0.65,使之具有玻璃的效果,這些部分是二次曲面。例如機體繪制命令為:
  gluCylinder(quadric,0.25,0.25,3.5,20,2);
  而機翼和機尾的各個部分都是多邊形的,應使用多邊形鑲嵌工具來繪制。例如機尾繪制命令為:
  gluTessBeginPolygon(tess,NULL);
  gluTessBeginContour(tess);
  for (i=0;i<6;i ++)
     gluTessVertex(tess,tail[i],tail[i]);
  gluTessEndContour(tess);
  gluTessEndPolygon(tess);
3.2 程序實現方法
  程序實現應用了顯示列表技術。OpenGL的顯示列表是事先存儲的用于稍后執行的一組OpenGL命令序列。分析了飛行器的幾何形體構造、設置完繪制命令并進行紋理貼圖美化飛行器外表后,就可將各個部分的構造程序代碼編輯到顯示列表里存儲起來了。
  F16Body=glGenLists(1);
   glNewList(F16Body,GL_COMPILE);
  最后調用函數glEndList( ),標志一個顯示列表的結束。
  在視圖類的DrawScene( )事件的適當位置用函數glCall-List(F16Body)調用顯示列表,從而按照預先定義的順序執行飛行器模型的繪制。
4  六維鼠標控制的飛行仿真系統總體設計
4.1 六維鼠標的工作原理
  現實中飛行器是可以進行三維移動以及三維旋轉運動的,因此在飛行仿真系統中就需要一種可以實現上述運動模式的輸入控制設備。這里選擇了一種新型并聯結構六維控制器,即六維鼠標。
  該六維鼠標基于力控制原理,通過集成A/D轉換器的動態應變儀與計算機的COM1口(串行口1)相連,采用串行通信機制。操作者握住鼠標,向所要移動或轉動的方向用力,鼠標將受到的六維力傳遞到內部的微型六維力敏感元件,接著通過鼠標內部機制生成與該力成正比的電壓信號,并將電壓信號放大后采集進計算機,利用力Jacobian矩陣求出鼠標受到的空間作用力情況[3]。六維鼠標的控制系統軟件實現將三個力分量分別乘以某個大于零的系數,生成飛行器作空間直線運動的位移分量,從而控制仿真系統中飛行器的平移運動;將三個力矩分量經過一定算法的變換后產生飛行器繞X、Y、Z三個坐標軸轉動的角位移,從而控制飛行器的旋轉運動, 在算法中應用到了六維鼠標的標定矩陣G6×6。具體變換算法請查閱文獻3。圖1描述了六維鼠標的工作原理流程。

4.2 仿真系統總體設計
  六維鼠標和計算機之間采用串口通信,所以在程序設計中選用了MSComm控件。該控件通過串行端口傳送和接收數據,從而為應用程序實現串行通信功能[4]。MSComm控件將通信的大部分底層操作都封裝在控件內部,應用程序只需獲取和設置相應的控件屬性即可,簡化了編程的復雜度。在Visual C++ 6.0中使用該控件的基本流程如圖2所示。


  本仿真系統中當控件插入工程后,應將串口初始化及打開命令放在視圖類的OnCreate()事件中。在應用程序建立時就打開串口,準備接收鼠標數據。
  應用MSComm控件的OnComm( )事件作為對六維鼠標輸入數據的響應事件,并在事件處理中實現對飛行器的運動控制。首先檢測串口的GetCommEvent( )事件,如果該事件返回值為2,表示接收緩沖區內的字符數達到Rthreshold值,發生接收事件(comEvReceive)。接下來編寫接收數據的過程,實現將鼠標傳輸的數據轉化為三個平移分量(Xp、Yp、Zp)和三個旋轉分量(Xr、Yr、Zr)。將Xp、Yp、Zp、Xr、Yr、Zr六個控制變量傳遞給DrawScene( )函數,在飛行器繪制之前修改視景坐標系,從而控制飛行器的運動。
  glTranslatef(Xp,0.0f,0.0f);
  glTranslatef(0.0f,Yp/10,0.0f);
  glTranslatef(0.0f,0.0f,-Zp);
  glRotated(Xr-37,1.0,0.0,0.0);
  glRotated(Yr-7,0.0,1.0,0.0);
  glRotated(Zr-2,0.0,0.0,1.0);
  glCallList(F16Body);
        系統總體實現流程如圖3所示。

5  結  論
  本文所開發的飛行器仿真系統使用Visual C++ 6.0作為軟件平臺,應用OpenGL來開發具有六維運動能力的飛行模擬器和高度真實感的三維地形,以六維鼠標作為飛行器的控制輸入設備,通過串行通信機制控制計算機中的仿真系統。用戶通過給六維鼠標施加不同方向、不同大小的力來自由控制系統中飛行模擬器的運動,實現飛行器在虛擬地形環境中的三維移動和三維轉動,從而實現對真實世界中飛行器運動的仿真。
參考文獻
1   毛玉姣,王梅,陳遠.虛擬現實技術及其應用.圖書情報知識,1997;(4)
2   戴達強,姜曉彤,朱欣華.OpenGL在圖形仿真系統中的應用.現代電子技術,2001;(9)
3   趙現朝,金振林.六維鼠標中力矩與轉角轉換的一種新方法.  計算機工程,2002;(7)
4   李現勇.Visual C++串口通信技術與工程實踐.北京:人民郵電出版社,2002

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美日韩久久不卡| 久久久中精品2020中文| 国产在线视频欧美一区二区三区| 欧美精品三级在线观看| 一区二区三区四区国产精品| 国产精品日韩专区| 欧美中文字幕在线视频| 在线不卡亚洲| 欧美在线高清| 欧美久久久久中文字幕| 久久久久天天天天| 亚洲国产精品ⅴa在线观看| 国产欧美视频在线观看| 亚洲高清成人| 亚洲一区二区在线| 欧美**人妖| 欧美亚洲第一页| 亚洲性感美女99在线| 国产精品久久影院| 欧美婷婷六月丁香综合色| 欧美成人免费全部观看天天性色| 久久精品网址| 国产伦精品一区二区三| 亚洲午夜精品久久久久久app| 性视频1819p久久| 免费一级欧美片在线播放| 亚洲神马久久| 欧美理论在线| 午夜精品福利一区二区蜜股av| 欧美一区二区网站| 一本一本久久a久久精品牛牛影视| 久久精品视频在线免费观看| 国产主播精品| 一区二区三区国产盗摄| 亚洲网站视频福利| 亚洲午夜成aⅴ人片| 国产精品一区免费视频| 欧美高清在线观看| 欧美影院在线| 午夜在线成人av| 亚洲视频精选| 亚洲欧美乱综合| 狠狠入ady亚洲精品经典电影| 国产精品99久久久久久人| 激情六月婷婷综合| 久久综合狠狠综合久久综青草| 亚洲精品乱码久久久久久日本蜜臀| 久久这里有精品视频| 久久久亚洲午夜电影| 日韩一本二本av| 国内视频精品| 欧美专区在线播放| 亚洲综合视频一区| 国产精品盗摄久久久| 国产精品sm| 欧美福利一区二区三区| 久久综合伊人| 亚洲精品一区二区网址| 久久在线91| 亚洲欧美中文在线视频| 国内精品久久久久国产盗摄免费观看完整版| 国产亚洲精品久久飘花| 欧美电影在线播放| 亚洲欧美国产另类| 亚洲国产精品尤物yw在线观看| 亚洲一区二区日本| 国产精品一区免费在线观看| 久久久999精品| 性娇小13――14欧美| 国产欧美日韩中文字幕在线| 国产精品自拍一区| 国产一区二区欧美日韩| 一区二区三区产品免费精品久久75| 国产欧美短视频| 亚洲国产精品综合| 一区二区在线观看视频| 9色porny自拍视频一区二区| 国产精品亚洲激情| 亚洲免费观看高清完整版在线观看| 国产欧美va欧美va香蕉在| 中日韩视频在线观看| 日韩视频一区二区三区在线播放| 欧美一区二区日韩一区二区| 国产日韩欧美高清免费| 一本久道久久综合狠狠爱| 国产精品尤物福利片在线观看| 欧美国产日韩一区二区| 亚洲精品久久久蜜桃| 一本一本久久a久久精品牛牛影视| 欧美jizzhd精品欧美巨大免费| 亚洲欧美视频一区| 国产原创一区二区| 国产一区二区av| 欧美一区午夜视频在线观看| 国产精品一区在线播放| 亚洲国产精品成人综合| 久久这里有精品15一区二区三区| 激情懂色av一区av二区av| 久久精品国产清自在天天线| 91久久精品美女| 国产三级欧美三级日产三级99| 国产免费一区二区三区香蕉精| 欧美三级日本三级少妇99| 亚洲欧美另类在线| 欧美三级黄美女| 亚洲美女视频网| 欧美91福利在线观看| 欧美一区二区三区免费观看| 亚洲精品久久久久久下一站| 国产综合亚洲精品一区二| 国产精品一区二区三区成人| 国产一区二区av| 日韩视频精品| 欧美人妖在线观看| 久久亚洲国产精品日日av夜夜| 国外成人在线视频| 亚洲视频国产视频| 国产一区二区三区黄视频| 欧美亚洲第一页| 黄色资源网久久资源365| 欧美午夜电影在线| 欧美日韩亚洲一区二| 欧美日韩一区二区国产| 亚洲精品国产精品国自产观看浪潮| 蜜月aⅴ免费一区二区三区| 国产精品丝袜xxxxxxx| 国产一级揄自揄精品视频| 亚洲欧美日韩国产中文在线| 久久午夜羞羞影院免费观看| 亚洲精美视频| 日韩亚洲国产欧美| 久久综合久久综合这里只有精品| 午夜免费电影一区在线观看| 亚洲免费影视第一页| 先锋影音国产一区| 亚洲国产精品久久久久秋霞影院| 午夜精品久久久久久久久| 欧美顶级少妇做爰| 国产亚洲精品bv在线观看| 国产精品视频九色porn| 久久影院午夜片一区| 欧美日韩一区二区在线| 亚洲人精品午夜在线观看| 午夜精品网站| 国产日韩免费| 欧美日韩999| 国产婷婷色综合av蜜臀av| 久久这里只精品最新地址| 国产伪娘ts一区| 一本色道久久综合亚洲精品小说| 一本色道88久久加勒比精品| 国产午夜精品久久久久久免费视| 欧美乱人伦中文字幕在线| 午夜亚洲精品| 国产婷婷色一区二区三区在线| 国产免费观看久久| 亚洲高清不卡| 亚洲欧美精品中文字幕在线| 久久狠狠一本精品综合网| 欧美一级在线视频| 欧美激情一区二区三区高清视频| 国产精品久久久久av| 亚洲国产欧美久久| 国产精品一二三视频| 亚洲片国产一区一级在线观看| 免费永久网站黄欧美| 蜜臀91精品一区二区三区| 在线综合+亚洲+欧美中文字幕| 亚洲综合三区| 欧美视频久久| 91久久视频| 黄色成人av| 亚洲欧美日本国产专区一区| 欧美大成色www永久网站婷| 欧美伊人精品成人久久综合97| 亚洲精品三级| 亚洲精品乱码久久久久久按摩观| 欧美一激情一区二区三区| 久久亚洲影院| 玖玖视频精品| 精品白丝av| 暖暖成人免费视频| 欧美黄色小视频| 韩日精品在线| 国产精品乱码一区二三区小蝌蚪| 欧美一级一区| 亚洲性线免费观看视频成熟| 亚洲字幕一区二区| 国产美女诱惑一区二区| 欧美日韩中文另类| 久久综合狠狠综合久久综青草| 性一交一乱一区二区洋洋av| 欧美大片在线观看| 久久久久久久久久看片| 免费亚洲电影在线| 亚洲人成网站在线观看播放| 亚洲黄色免费网站| 欧美主播一区二区三区美女 久久精品人| 欧美日韩精品久久久| 国产在线视频欧美一区二区三区| 欧美jizz19性欧美| 国产日韩欧美视频在线| 夜夜嗨av一区二区三区免费区| 久久精品视频导航| 久久综合给合久久狠狠色| 久久一区精品| 一区二区日本视频| 欧美成人日韩| 中文国产一区| 免费久久99精品国产自| 欧美福利视频| 国产精品久久久久久亚洲毛片| 午夜精彩视频在线观看不卡| 欧美三区在线视频| 国产一区激情| 欧美顶级艳妇交换群宴| 免费观看在线综合| 亚洲国产日韩欧美在线图片| 国产综合久久久久久| 一区二区三区中文在线观看| 欧美大香线蕉线伊人久久国产精品| 欧美片在线播放| 久久免费高清| 欧美午夜女人视频在线| 亚洲午夜一区| 国内成+人亚洲| 久久国产精品久久久久久电车| 欧美高清视频在线播放| 免费看成人av| 久久久午夜视频| 久久综合亚州| 精品成人一区二区| 国产乱肥老妇国产一区二| 欧美激情视频一区二区三区不卡| 亚洲美女视频网| 亚洲大片在线观看| 国产精品成人v| 国产精品久久久久久久9999| aa日韩免费精品视频一| 欧美成人资源| 一区二区三区免费在线观看| 久久都是精品| 亚洲国产精品va| 国产一区二区电影在线观看| 欧美日韩国产综合网| 亚洲精品一区在线观看香蕉| 免费观看国产成人| 午夜精品久久久久久久白皮肤| 久久国产精品久久国产精品| 久久精品日产第一区二区三区| 国产精品久久久久久影院8一贰佰| 欧美在线视频全部完| 国产精品推荐精品| 欧美日韩国产三区| 18成人免费观看视频| 亚洲欧美日韩一区在线| 韩国v欧美v日本v亚洲v| 老司机免费视频一区二区三区| 亚洲一级片在线看| 中文在线资源观看网站视频免费不卡| 国产精品久久久久久久免费软件| 一区二区三区四区五区视频| 欧美大片免费观看| 国产乱码精品一区二区三| 先锋资源久久| 亚洲国产精选| av成人动漫| 欧美3dxxxxhd| 久久青草欧美一区二区三区| 欧美日韩国产经典色站一区二区三区| 久久精品人人爽| 国语自产精品视频在线看抢先版结局| 国产亚洲成精品久久| 激情综合自拍| 亚洲高清中文字幕| 99国产麻豆精品| 国产一区二区日韩精品| 亚洲欧洲精品一区| 欧美一区久久| 久久综合久久综合久久| 欧美激情第3页| 亚洲精品一区二区三区在线观看| 久久久免费观看视频| 亚洲在线视频免费观看| 久久婷婷av| 亚洲色图自拍| 欧美国产精品劲爆| 欧美精品在线观看91| 久久精品噜噜噜成人av农村| 亚洲激情电影在线| 欧美激情视频一区二区三区在线播放| 伊人久久婷婷色综合98网| 99在线精品视频在线观看| 欧美r片在线| 亚洲国产精品一区在线观看不卡| 欧美一区二区三区日韩| 亚洲专区国产精品| 国产精品久久精品日日| 中日韩美女免费视频网址在线观看| 欧美日韩国产一区二区三区地区| 欧美日韩八区| 中日韩视频在线观看| 国产亚洲一区二区在线观看| 欧美日韩成人在线播放| 欧美一区国产一区| 狠狠色丁香久久婷婷综合_中| 小嫩嫩精品导航| 麻豆成人精品| 欧美精品一区二区精品网| 亚洲日本成人女熟在线观看| 国产精品自在在线| 欧美日韩成人免费| 欧美大片网址| 亚洲日本中文字幕免费在线不卡| 欧美婷婷六月丁香综合色| 欧美激情视频在线播放| 久久久久久尹人网香蕉| 国产精品一区二区三区四区| 国产亚洲欧美一区二区三区| 国产精品99久久99久久久二8| 国产精品欧美日韩| 欧美日韩不卡| 一本色道**综合亚洲精品蜜桃冫| 国语自产精品视频在线看一大j8| 国产精品丝袜91| 亚洲精品视频免费观看| 日韩视频免费在线观看| 欧美中日韩免费视频|