国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

姚崇 徐明 隋曉奎

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

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

中圖分類號:TP391 文獻(xiàn)標(biāo)識碼: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

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

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

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

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

圖1 平面航跡

2 航跡繪制

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

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

采用Direct3D繪制平面圖形的關(guān)鍵技術(shù)有:

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

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

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

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);

④設(shè)置材質(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)建頂點(diǎn)緩沖區(qū)

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

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

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

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

memcpy( pVertices, pVertex, dwSizeofVertices);

pVB->Unlock();

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

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

圖2 三維航跡

3 結(jié)束語

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

參考文獻(xiàn):

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

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

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

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

固阳县| 广汉市| 赤城县| 新蔡县| 黄龙县| 玛沁县| 安仁县| 清流县| 通渭县| 林甸县| 山阳县| 尚义县| 铜山县| 老河口市| 陕西省| 和平区| 英吉沙县| 包头市| 海城市| 濮阳县| 建平县| 长子县| 桓仁| 台南市| 阳山县| 静安区| 合作市| 梅河口市| 霍城县| 嘉鱼县| 房产| 丰城市| 贵州省| 苏州市| 北流市| 海门市| 淮滨县| 屯门区| 惠水县| 溆浦县| 舒城县|