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

?

基于OpenGL的汽車起重機視景仿真關(guān)鍵技術(shù)

2014-09-07 02:31胡天明劉桂波黨躍軒李洪智
黑龍江工程學院學報 2014年1期
關(guān)鍵詞:視景球體漫游

胡天明,劉桂波,王 金,黨躍軒,李洪智

(黑龍江工程學院 機電工程學院,黑龍江 哈爾濱 150050)

基于OpenGL的汽車起重機視景仿真關(guān)鍵技術(shù)

胡天明,劉桂波,王 金,黨躍軒,李洪智

(黑龍江工程學院 機電工程學院,黑龍江 哈爾濱 150050)

在OpenGL的環(huán)境下,建立汽車起重機模擬操作的視景仿真系統(tǒng)。利用3DSMAX建立起重機的機構(gòu)模型,使用Java作為第三方軟件將3D模型導入OpenGL中。采用天空半球的方法模擬3D天空,采用gllookat函數(shù)實現(xiàn)場景及操作室實時性良好的漫游,實現(xiàn)通過鍵盤和鼠標完成汽車起重機的變幅、起重臂伸縮、起升、回轉(zhuǎn)、下降等模擬操作。

OpenGL;汽車起重機;視景仿真;漫游

隨著虛擬現(xiàn)實技術(shù)的發(fā)展,各種基于計算機仿真技術(shù)的仿真訓練器因其能夠有效避免訓練事故、降低訓練成本、改善訓練條件、縮短培訓周期、提高培訓質(zhì)量等優(yōu)點在人員培訓領(lǐng)域發(fā)揮了重要的作用。汽車起重機駕駛模擬培訓系統(tǒng)就是以計算機系統(tǒng)為核心,配合完全模擬實物構(gòu)建的駕駛操縱平臺,利用虛擬現(xiàn)實技術(shù)構(gòu)建一個真實、有效、靈活可控的模擬訓練環(huán)境,在虛擬的汽車起重機工作場景中完成對汽車起重機駕駛員的集中訓練。由于人類獲取的信息有80%來源于人的視覺,人們也更渴望與自然更相符的仿真訓練環(huán)境,因此,模擬培訓系統(tǒng)中的視景仿真系統(tǒng)就顯得尤為重要。本文針對視景系統(tǒng)所涉及的幾何模型導入、模型控制、天空、漫游等關(guān)鍵技術(shù)進行了探討。

1 3DS模型的導入

在視景仿真系統(tǒng)中,OpenGL作為三維圖象生成和控制的編程接口。汽車起重機的幾何模型構(gòu)造復雜,直接利用只提供了最基本的圖元繪制命令的OpenGL繪制建模不太現(xiàn)實。本文采用專用的建模軟件3DSMAX,將汽車起重機的主體模型按運動關(guān)系分結(jié)構(gòu)建立模型庫,再結(jié)合Visual C++開發(fā)環(huán)境直接獲取3DS模型數(shù)據(jù)進行繪制及交互控制。

由“塊”組成的3DS模型文件一般是以MAX格式保存的,但它也可以保存為OBJ格式。OBJ文件不需要任何文件頭(File Header),由一行行文本組成,注釋行以符號“#”開頭,空格和空行可以隨意加到文件中以增加文件的可讀性。在OpenGL讀取模型時要先建立自己的數(shù)據(jù)結(jié)構(gòu)以存儲模型數(shù)據(jù),再從OBJ文件中讀取數(shù)據(jù)并存放在OpenGL程序中,建立其繪制模型的顯示列表。本文嘗試了把3DS Max建立的汽車起重機模型以O(shè)BJ的格式導出,再將OBJ格式的模型文件利用第三方軟件Java導入OpenGL,其導入流程如圖1所示。

圖1 導入模型流程

模型導入主程序如下:

import OBJLoader.OBJModel;

public class Renderer implements GLEventListener ,KeyListener{

OBJModel dipan;

OBJModel caozuoshi;

OBJModel shensuobi1;

public void init(GLAutoDrawable drawable) {

final GL gl = drawable.getGL();

/**底盤*/

dipan=new OBJModel("modCar/dipan", gl);

/**操作室**/

caozuoshi=new OBJModel("modCar/caozuoshi", gl);

/**伸縮一號臂**/

shensuobi1=new OBJModel("modCar/shensuobi1", gl);

}

public void display(GLAutoDrawable drawable) {

GL gl = drawable.getGL();

//底盤

gl.glPushMatrix();

gl.glTranslated(-1.0, -4.0, 0.0);

gl.glScaled(5, 5, 5);

// gl.glRotated(i++, 0, 1, 0);

dipan.draw(gl);

gl.glPopMatrix();

//操作室

gl.glPushMatrix();

gl.glTranslated(0.5, -3.6, 0.0);

gl.glScaled(2, 2, 2);

if(xuanzhuan){

gl.glRotated(i++, 0, 1, 0);

}

gl.glRotated(i, 0, 1, 0);

caozuoshi.draw(gl);

gl.glPopMatrix();

//1號伸縮臂

gl.glPushMatrix();

gl.glTranslated(0.5, -3.6, 0.0);

gl.glScaled(5, 5, 5);

if(xuanzhuan){

gl.glRotated(i++, 0, 1, 0);

}

gl.glRotated(i, 0, 1, 0);

if(shengqi){

gl.glRotated(j--, 0, 0, 1);

}

// gl.glRotated(j, 0, 1, 0);

shensuobi1.draw(gl);

gl.glPopMatrix();

}

}

2 天空的實現(xiàn)

在視景仿真系統(tǒng)中,3D天空的模擬必不可少。通常采用非常簡化的天空模型,包括以下3種方法:

1)用一種接近天空的淡藍色來清除背景。淡藍色的背景雖然簡單容易,但效果單一,真實感較弱,并且不可變化。

2)采用天空盒( SkyBox) 的方法。就是使用一個立方體盒子來模擬一個天空,這個盒子要足夠大,以至于可以容納要繪制的整個場景。有一點需要注意的是立方體的各個面的法線是朝向立方體內(nèi)的;如果是通過窗戶或其它的洞孔看到天空,在這樣的室內(nèi)場景中,通常會使用盒狀的天空體。天空盒的實現(xiàn)需要六面的紋理貼圖,邊緣易出現(xiàn)縫隙,本身消耗內(nèi)存空間。

3)采用天空球(SkyBall)的方法。首先在3D場景中建立一個半球的模型,由于天空體離觀察者距離非常遠,所以模型可以設(shè)計得比較簡單;球體的紋理貼圖采用平面的紋理映射,就會出現(xiàn)圖像的拉伸,達不到預料中的效果,所以對于球體的紋理貼圖不能采用平面的紋理映射,可以采用球面的紋理映射。此外,通過按鍵響應函數(shù),以任意角度旋轉(zhuǎn),任意高度升降3D天空,交互性強,因此,本文選用天空球作為戶外場景。利用數(shù)學方程建立在球面坐標系下,半球上任意一點的坐標為

(1)

式中:R為球半徑;φ為緯度,0≤φ≤90°;θ為經(jīng)度,0≤θ≤360°。

球體的繪制利用glu庫中二次曲線函數(shù)glusphere進行繪制,并使用天空背景的紋理貼圖, 其繪制流程如圖2所示。需要注意的是開啟球體的法線,并且指向球體內(nèi)部,從而達到從球體內(nèi)部看到天空。

圖2 天空繪制流程

球體相關(guān)代碼

public void init(GLAutoDrawable drawable) {

final GL gl = drawable.getGL();

/**場景*/

model=new OBJModel("road3", gl);

/**天空球**/

obj=new GLUquadricImpl();

//

glu.gluQuadricNormals(obj, GLU.GLU_TRUE);

glu.gluQuadricOrientation(obj, GLU.GLU_INSIDE);

// glu.gluQuadricDrawStyle(obj, GLU.GLU_POINT);

/**切割屏面**/

gl.glEnable( GL.GL_CLIP_PLANE1 );

double equation[] = { 0f, 1f, 0f, 0f};

gl.glClipPlane( GL.GL_CLIP_PLANE1 , equation, 0 );

// gl.glClipPlane(GL.GL_CLIP_PLANE0, arg1, arg2);

glu.gluQuadricTexture(obj, true);

}

public void display(GLAutoDrawable drawable) {

GL gl = drawable.getGL();

//天空繪制

gl.glPushMatrix();

gl.glBindTexture(GL.GL_TEXTURE_2D, index[7]);

gl.glRotated(90, 0, 0, 1);

gl.glRotated(isky=isky+0.03, 1, 0, 0);

glu.gluSphere(obj, 200, 32, 32);

gl.glPopMatrix();

}

3 場景的漫游

虛擬工作場景漫游的最大難點在于建模逼真度和繪制實時性的矛盾。由于這種漫游所看到的景象離觀察者近,就要求繪制非常逼真。因此,建模時構(gòu)造要精細,會消耗很多時間。同樣,由于計算機性能的制約,構(gòu)造出來的模型越復雜,在繪制時要達到實時效果就越困難,實時性太差就會使觀察者無法接受。

實現(xiàn)漫游可以通過移動場景和模型,還可以通過移動視點來實現(xiàn),由于移動模型所要達到的實時效果性差所以采用gllookat函數(shù)達到實時性良好的漫游,其程序結(jié)構(gòu)如圖3所示。

圖3 結(jié)構(gòu)

通過內(nèi)部鍵盤和鼠標監(jiān)聽器得到漫游輸入的相關(guān)數(shù)據(jù),將這些封裝好的數(shù)據(jù)傳給鍵盤監(jiān)聽的句柄或鼠標句柄。這兩個類通過調(diào)用攝像機類Camera相關(guān)方法來改變glulookat 中的6個參數(shù)從而達到漫游的效果。操作室視角的漫游也是通過改變攝像機類Camera的參數(shù)來實現(xiàn)的。漫游能夠達到預期效果,可以環(huán)顧工作現(xiàn)場,圖4為操作室場景效果圖。

圖4 操縱室場景效果

4 模型的控制

模型的控制是先開啟gl的模型視圖矩陣,然后通過鍵盤輸入的信號達到控制模型的移動glTranslated與旋轉(zhuǎn)glRotated,其控制流程如圖5所示。

圖5 模型控制流程

利用Render類實現(xiàn)KeyListener類,覆蓋keyPressed和keyReleased方法,改變i,j變量。當程序下次調(diào)用汽車起重機操作室的glRotated函數(shù)即可達到旋轉(zhuǎn)的目的,同樣可實現(xiàn)調(diào)用伸縮臂旋轉(zhuǎn)與伸縮等動作,如圖6所示。

圖6 模擬操作效果

5 結(jié)束語

本文嘗試了在OpenGL的環(huán)境下,建立汽車起重機模擬操作的視景仿真系統(tǒng)。為了簡化模型的建立,首先使用3DSMAX建立汽車起重機的機構(gòu)模型,并借助于Java作為第三方軟件將3D模型導入OpenGL中。在視景系統(tǒng)中,采用天空半球的方法模擬了3D天空,并采用gllookat函數(shù)實現(xiàn)了場景及操作室的漫游。在操縱的模擬上,實現(xiàn)了通過鍵盤和鼠標完成汽車起重機的旋轉(zhuǎn)、升起、起吊動作,實時性、交互性良好。

[1]朱安宏.基于OpenGL的3D天空仿真[J].現(xiàn)代電子技術(shù),2007(24):81-84.

[2]米劍,劉鵬遠.視景仿真中天空背景真實感改進[J].系統(tǒng)仿真學報,2001,11(S2):250.

[3]張正波,牟彥,黃華,等.OPENGL實現(xiàn)3DS文件中的模型自由旋轉(zhuǎn)[J].計算機工程與應用,2005(13):98-100.

[4]閻曉東,張永生.基于3DS MAX環(huán)境的三維場景重建工具[J].測繪學院學報,2002(19):109-112.

[5]劉桂波,胡天明.汽車起重機模擬操縱系統(tǒng)的關(guān)鍵技術(shù)[J].黑龍江工程學院學報:自然科學版,2012(3):29-31.

[6]嚴桂蘭.Java編程模式與范例:基礎(chǔ)開發(fā)技巧[M]. 北京:機械工業(yè)出版社,2002.

[7]劉習文.基于OpenGL的起升機構(gòu)仿真研究[D].武漢:武漢科技大學,2002.

[8]和平鴿工作室.OpenGL 高級編程與可視化系統(tǒng)開發(fā)(高級編程篇)[M].北京:中國水利水電出版社,2003.

The scene simulation key technologies of truck crane based on OpenGL

HU Tian-ming, LIU Gui-bo,WANG Jin,DANG Yue-xuan,LI Hong-zhi

(College of Electromechanical Engineering, Heilongjiang Institute of Technology , Harbin 150050, China)

In the environment of OpenGL, a scene simulation system of truck crane simulating operation is established. 3D model of truck crane is added to OpenGL through Java, which is used as the third party software. A 3D sky is simulated by the method of sky hemisphere. A real time roaming of scene and cab is realized by the use of function gllookat. The use of keyboard and mouse can make the truck crane model changed with amplitude, extend, rise revolve and hoist.

OpenGL;truck crane;scene simulation;roam

2013-10-26

黑龍江省教育廳基金資助項目(11541009)

胡天明(1964-),男,教授,研究方向:機電一體化.

TH213.6;TP391.41

A

1671-4679(2014)01-0047-05

郝麗英]

猜你喜歡
視景球體漫游
越來越圓的足球
虛擬現(xiàn)實技術(shù)在游戲設(shè)計中的應用及研究
計算機生成均值隨機點推理三、四維球體公式和表面積公式
霹靂漫游堂
廣告創(chuàng)意新方法——球體思維兩極法
NASA漫游記
Optimization of rice wine fermentation process based on the simultaneous saccharification and fermentation kinetic model☆
全回轉(zhuǎn)拖輪運動建模與視景仿真
基于Vortex與Vega Prime的車輛模擬器動力學與視景仿真
基于STK的衛(wèi)星實時視景仿真系統(tǒng)設(shè)計
斗六市| 桃源县| 肇州县| 南充市| 福海县| 汝阳县| 琼海市| 河曲县| 阆中市| 沙雅县| 龙泉市| 大邑县| 温泉县| 锦州市| 庆云县| 田阳县| 苗栗市| 隆尧县| 榆树市| 会昌县| 上高县| 刚察县| 余庆县| 桐乡市| 绥中县| 响水县| 云霄县| 辉南县| 大厂| 瑞昌市| 积石山| 黄石市| 德化县| 吴旗县| 盱眙县| 建始县| 凭祥市| 大洼县| 扬中市| 嘉定区| 郸城县|