• 
    

    
    

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

      ?

      基于Direct 3D的三維航跡繪制

      2015-09-09 11:13:11姚崇徐明隋曉奎
      電腦知識與技術 2015年16期

      姚崇 徐明 隋曉奎

      摘要:為了充分利用飛行參數(shù)記錄系統(tǒng)記錄的飛行數(shù)據(jù),提出一種對飛行參數(shù)進行預處理和利用Direct3D繪制飛行三維航跡的方法,采用以上方法繪制的航跡頂點和三角形圖元數(shù)據(jù)量較小,程序運行流暢、性能穩(wěn)定,能夠滿足飛行參數(shù)再現(xiàn)的需求。

      關鍵詞:三維航跡;飛參數(shù)據(jù);Direct3D

      中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2015)03-0246-02

      Based on the Direct 3D Three-Dimensional Track is Drawn

      YAO Chong,XU Ming,SUI Xiao-kui

      (Unit 93199 Ttheory Training Department,Harbin 150000,China)

      Abstract: in order to make full use of the flight parameter recording system record the flight data, preprocessing and put forward a kind of flight parameters by using the method of Direct3D rendering 3D flight track, using the above method to track the vertices and triangles primitive data quantity is small, the program runs smooth, stable performance and can meet the needs of flight parameter representation.

      Key words: 3D track;According to the flying parameters;Direct3D

      目前,我軍某型教練機裝備的飛行參數(shù)記錄系統(tǒng)記錄的飛行參數(shù)包括了飛行過程中的飛行狀態(tài)和設備工作性能等參數(shù)。充分利用該信息資源,不僅可以監(jiān)控飛機的安全工作能力,輔助飛行事故調(diào)查,而且也可以幫助飛行員及時了解飛行課目的實際完成情況,檢查飛行訓練質(zhì)量[1]。

      為了便于檢查飛行訓練效果,需要利用飛參數(shù)據(jù)對飛行過程進行仿真再現(xiàn)。本文主要介紹對GPS數(shù)據(jù)進行預處理以及利用Direct3D繪制飛行立體航跡的方法。

      1 GPS數(shù)據(jù)預處理

      本文中用于飛行再現(xiàn)的GPS數(shù)據(jù)來自飛機飛行過程中采集和記錄的數(shù)據(jù),由于飛機的飛行環(huán)境較為復雜,安裝在飛機上的傳感器對數(shù)據(jù)的采集精度和采樣頻率也較為有限,因此不可避免地存在各種誤差,甚至是誤記錄。在使用該數(shù)據(jù)進行軌跡再現(xiàn)時,必須對數(shù)據(jù)進行預處理。數(shù)據(jù)預處理包括野值的剔除、數(shù)據(jù)平滑和插值等。對于野值數(shù)據(jù)的處理通常采用的方法是低階多項式滑動擬合方法來識別異常數(shù)據(jù)[2]。數(shù)據(jù)平滑的方法有多種,本文根據(jù)GPS數(shù)據(jù)的實際情況選擇五點線性平滑算法進行處理。由于某型教練機的飛參記錄系統(tǒng)數(shù)據(jù)采集和記錄頻率最高的為每秒鐘8次,該頻率對于飛行再現(xiàn)是遠遠不夠的,因此還需要對數(shù)據(jù)進行插值處理,本文為了提高數(shù)據(jù)處理的速度,采用線性插值算法。經(jīng)過以上處理后的航跡如下圖所示:

      圖1 平面航跡

      2 航跡繪制

      Direct3D是由微軟開發(fā)的DirectX交互媒體技術的實時三維圖形組件,它為程序員提供了一個底層的、高性能的接口,它同硬件相結合,具有同設備無關的靈活性,因此成為三維圖形程序設計的首選工具[3]。在Direct3D中,由基本的點組成圖元(Primitive),圖元是Direct3D中最小的圖像元素,進行3D渲染時,就是以圖元為單位。Direct3D設備支持的圖元類型包括:點列表、線列表、線條紋、三角列表、三角條紋和三角扇形圖元[4]。線條紋圖元的每個單元都是一條線,進行3D渲染時,把所有的點用線段進行連接,然后進行渲染。使用線條紋渲染時,可以組成各種曲線等。三角條紋圖元的每個單位都是一個三角形,需要由3個頂點組成一個三角形圖元,每個相鄰的三角形是相連在一起的。進行3D渲染時,把每3個點用線段進行連接,然后進行渲染,由于圖元中各點的位置不同,連接的方式也不相同,因此通過三角條紋圖元可以組成任意復雜的三維對象。

      本文中的三維航跡就是采用以上兩種圖元進行繪制的。首先,由于在飛參數(shù)據(jù)預處理階段已經(jīng)求得了飛行航跡的各點坐標,通過該航跡各點的坐標可以求得飛機兩側(cè)機翼端點的航跡坐標,將兩端點航跡坐標按照三角條紋圖元的順序進行連接,從而實現(xiàn)了繪制航跡彩帶的功能。其次,由于采用以上方法繪制的航跡彩帶是沒有厚度的,即當從航跡彩帶的側(cè)面觀察航跡時是看不見任何圖形,因此本文采用了在航跡彩帶兩側(cè)繪制線條列表圖元的方法進行解決。最后通過配合方向、位置即時變化的飛機模型,使得航跡彩帶的表現(xiàn)形象、直觀,不僅可以反映飛機的運動趨勢和方向,還可以反映航向上各點飛機的俯仰、傾斜、航向等航姿信息。

      采用Direct3D繪制平面圖形的關鍵技術有:

      ①生成航跡彩帶頂點數(shù)據(jù)。頂點數(shù)據(jù)的生成方法為:首先定義兩個頂點(Vector3Left和Vector3Right)為飛機中心相對于機身側(cè)軸偏移一個單位的長度,然后按照飛機每一時刻的姿態(tài)參數(shù),相對于飛機中心對頂點數(shù)據(jù)進行變換,最后再將該頂點數(shù)據(jù)平移到飛機每一時刻的位置處。其關鍵代碼如下:

      D3DXVECTOR3 Vector3Left=D3DXVECTOR3(1,0,0);

      D3DXVECTOR3 Vector3Right=D3DXVECTOR3(-1,0,0);

      D3DXMATRIX matRotZ;

      D3DXMatrixRotationZ(&matRotZ, Gama);

      D3DXVec3TransformCoord(&Vector3Left,&Vector3Left,&matRotZ);

      D3DXVec3TransformCoord(&Vector3Right,&Vector3Right,&matRotZ);

      D3DXMATRIX matRotY;

      D3DXMatrixRotationY(&matRotY, Psi);

      D3DXVec3TransformCoord(&Vector3Left,&Vector3Left,&matRotY);

      D3DXVec3TransformCoord(&Vector3Right,&Vector3Right,&matRotY);

      D3DXMATRIX matTranslation;

      D3DXMatrixTranslation(&matTranslation, X,Y,Z);

      D3DXVec3TransformCoord(&Vector3Left,&Vector3Left,&matTranslation);

      D3DXVec3TransformCoord(&Vector3Right,&Vector3Right,&matTranslation

      ②計算頂點法線。頂點法線是過頂點的一個矢量,用于在Gouraud Shading中計算光照和紋理效果。在生成曲面時,通常令頂點法線和相鄰平面的法線保持等角,這樣進行渲染時,會在平面拼接處產(chǎn)生一種平滑過渡的效果?;谝陨纤枷耄陨洗a分別計算出了與每個頂點相鄰的三個平面的法線,然后再對三個平面法線求與其等角度的頂點法線。其關鍵代碼如下:

      pVertex[i].Normal=(ComputeTriNormal(pVertex[0+VerList].Vector3,pVertex[1+VerList].Vector3,pVertex[2+VerList].Vector3)+ComputeTriNormal(pVertex[3+VerList].Vector3,pVertex[2+VerList].Vector3,pVertex[1+VerList].Vector3)+ComputeTriNormal(pVertex[2+VerList].Vector3,pVertex[3+VerList].Vector3,pVertex[4+VerList].Vector3))/3;

      ③計算面法線。面法線的計算首先需要計算出三角形圖元的兩條邊的矢量,然后再計算出于這兩條邊相互垂直的矢量即為該平面的法線。

      D3DXVECTOR3 NormalVec;

      D3DXVECTOR3 tmpV1=v1-v2;

      D3DXVECTOR3 tmpV2=v1-v3;

      D3DXVec3Cross(&NormalVec, &tmpV1, &tmpV2);

      ④設置材質(zhì):

      D3DMATERIAL9 mtrl;

      mtrl.Diffuse = mtrl.Ambient = D3DCOLORVALUE(0.4f,0.6f,1.0f,0.6f);

      mtrl.Specular = D3DCOLORVALUE(1.0f, 1.0f,1.0f, 1.0f)

      mtrl.Power=50.0f;

      pd3dDevice->SetMaterial( &mtrl );

      以上代碼定義了一個材質(zhì)對象,并對材質(zhì)對象的漫反射、環(huán)境光和高光部分的顏色和透明度賦值。

      ⑤創(chuàng)建頂點緩沖區(qū)

      pd3dDevice->CreateVertexBuffer(dwSizeofVertices,D3DUSAGE_WRITEONLY, FVF,D3DPOOL_MANAGED, &pVB, NULL );

      以上代碼按照頂點緩沖區(qū)的大小定了以頂點緩沖區(qū)。

      ⑥頂點緩沖區(qū)賦值

      pVB->Lock( 0, dwSizeofVertices, (VOID**)&pVertices, 0 )

      memcpy( pVertices, pVertex, dwSizeofVertices);

      pVB->Unlock();

      以上代碼實現(xiàn)了對定義的頂點緩沖區(qū)進行賦值的功能,即將頂點數(shù)據(jù)填充到頂點緩沖區(qū)。

      基于以上技術實現(xiàn)的三維航跡效果圖如下圖所示:

      圖2 三維航跡

      3 結束語

      為了充分、合理利用飛行參數(shù)記錄系統(tǒng)記錄的飛行數(shù)據(jù),本文論述了對飛參系統(tǒng)記錄的經(jīng)緯度數(shù)據(jù)進行預處理,以及采用Direct3D技術繪制三維航跡的方法,實現(xiàn)了飛行軌跡的再現(xiàn)功能。采用此方法繪制的飛行航跡,比較真實地反映了飛行實際,并且可以任意旋轉(zhuǎn)、縮放、平移,有很強的直觀性和可操作性。為飛參數(shù)據(jù)的綜合利用奠定了基礎,為監(jiān)控飛行訓練質(zhì)量、提升飛行技術和提高訓練效益,提供了一種有效的技術手段。

      參考文獻:

      [1] 曲建嶺, 唐昌盛, 李萬泉. 飛參數(shù)據(jù)的應用研究現(xiàn)狀及發(fā)展趨勢[J]. 計測技術, 2007,27(6): 4-7,11.

      [2] 蔡金獅, 解放軍總裝備部, 軍事訓練教材編委會. 飛行器系統(tǒng)辨識學[M]. 北京: 國防工業(yè)出版社, 2003.

      [3] Engel,W,F(xiàn), 周惟迪, 徐翎. Direct3D游戲編程入門教程[M]. 北京: 人民郵電出版社, 2005.

      [4] 楊青, 楊磊. 3D 游戲編程[M].北京: 中國科學技術出版社, 2004.

      奈曼旗| 武冈市| 海原县| 鸡东县| 小金县| 错那县| 宿松县| 永修县| 龙海市| 曲周县| 正安县| 长阳| 新丰县| 黄骅市| 治县。| 嘉定区| 色达县| 丰台区| 罗定市| 论坛| 彭州市| 德安县| 个旧市| 临汾市| 阳春市| 新源县| 建湖县| 五莲县| 长丰县| 巩义市| 宝丰县| 十堰市| 灵川县| 布尔津县| 集贤县| 武义县| 邻水| 宣化县| 临猗县| 泰来县| 辽宁省|