張 侃
(山西交通職業(yè)技術(shù)學(xué)院,山西 太原 030031)
視景系統(tǒng)仿真是將可視化仿真技術(shù)用于各種模擬器的視景系統(tǒng)中,以產(chǎn)生盡可能真實(shí)的場(chǎng)景效果,它綜合利用了計(jì)算機(jī)圖形學(xué)、信息論、計(jì)算機(jī)視覺(jué)、圖像處理、模式識(shí)別、軟件工程等科技[1]。隨著計(jì)算機(jī)技術(shù)和仿真技術(shù)的發(fā)展,結(jié)合虛擬現(xiàn)實(shí)的視景系統(tǒng)仿真在航空航天、軍事、交通等領(lǐng)域的廣泛應(yīng)用,將對(duì)汽車駕駛模擬圖形的設(shè)計(jì)與實(shí)現(xiàn)做了簡(jiǎn)單介紹。
單通道是按以下步驟完成:先創(chuàng)建了一個(gè)幀緩存、一個(gè)通道、一個(gè)視點(diǎn)、一個(gè)場(chǎng)景、多個(gè)實(shí)體對(duì)象、一個(gè)光源、一個(gè)霧化模型;再將實(shí)體對(duì)象、光源、霧化模型等添加到場(chǎng)景中;后將視點(diǎn)和場(chǎng)景同時(shí)加入到通道中;最后把通道加入到幀緩存中。完成后的單通道程序如下:
//定義單通道圖形的幀緩存、通道、視點(diǎn)和場(chǎng)景等資源
GV_Fbf fbf;
GV_Channel parent;
GV_Camera eye_camera;
GV_Scene scene;
GV_Light sunlight;
GV_Fog fog;
//創(chuàng)建單通道圖形的幀緩存、通道、視點(diǎn)和場(chǎng)景等資源
GV_fbf_create(&fbf);
GV_chn_create(&parent);
GV_cam_create(&eye_camera);
GV_scn_create(&scene);
GV_lsr_create(&sunlight);
GV_fog_create(&fog);
//設(shè)置單通道圖形的幀緩存、通道、視點(diǎn)和場(chǎng)景等資源的名字GV_fbf_set_name(fbf,“FBF”);
GV_chn_set_name(parent,“汽車駕駛訓(xùn)練模擬器”);
GV_cam_set_name(eye_camera,“CAMERA”);
GV_scn_set_name(scene ,“SCENE”);
GV_lsr_set_name(sunlight,“SUN”);
GV_fog_set_fog(fog,“FOG”);
//設(shè)置單通道圖形的視口大小和遠(yuǎn)近裁剪面
static GV_Viewport parent_vp={-1.0,1.0,-1.0,1.0};
static float far_clip=5000.0;
static float near_clip=1.0;
GV_chn_set_clip_near(parent,near_clip);
GV_chn_set_clip_far(parent,far_clip);
GV_chn_set_viewport(parent,&parent_vp);
//把視點(diǎn)和場(chǎng)景放入通道中
GV_chn_set_camera(parent,eye_camera);
GV_chn_set_scene(paent,scene);
//向幀緩存中添加通道
GV_fbf_add_channel(fbf,parent);
多通道圖形顯示中的各種資源間的層次關(guān)系(比單通道時(shí))要復(fù)雜一些。整個(gè)視景系統(tǒng)軟件采用幀緩存和一個(gè)駕駛員通道(driver)相連,駕駛員視點(diǎn)就設(shè)置在該通道中,并把整個(gè)視景系統(tǒng)的場(chǎng)景模型也放入這個(gè)通道,然后通過(guò)駕駛員通道與各個(gè)子通道進(jìn)行連接[2]。每一個(gè)通道的視點(diǎn)和場(chǎng)景都與駕駛員通道的相同。整個(gè)視景系統(tǒng)經(jīng)對(duì)幀緩存fbf樹型結(jié)構(gòu)的維護(hù)處理,完成整個(gè)系統(tǒng)的同步更新、訪問(wèn)控制、恢復(fù)系統(tǒng)功能等。
整個(gè)視景系統(tǒng)軟件創(chuàng)建了一個(gè)幀緩存、一個(gè)駕駛員通道(駕駛員視野或者是擋風(fēng)玻璃外場(chǎng)景通道)、兩個(gè)子通道(后視鏡和反光鏡通道)、一個(gè)駕駛員通道視點(diǎn)、視景系統(tǒng)的場(chǎng)景模型,以及其中的對(duì)象實(shí)體、一個(gè)光照、一個(gè)霧化模型;先將各個(gè)對(duì)象實(shí)體、光照模型、霧化模型加入場(chǎng)景模型;后將視點(diǎn)和場(chǎng)景放入相應(yīng)的通道,并把各個(gè)子通道添加到駕駛員通道中,最后把駕駛員通道連接到幀緩存中。多通道圖形顯示的程序如下:
//定義多通道圖形的幀緩存、通道、視點(diǎn)、場(chǎng)景資源
GV_Fbf fbf;
GV_Channel driver_chn,rearview_mirror_chn;
GV_Channel viewfinder_chn;
GV_Camera driver_cam;
GV_Scene scene;
GV_Obi scene_model,skydome;
GV_Light sunlight;
GV_Fog fog_model;
//創(chuàng)建多通道圖形的幀緩存、駕駛員通道、后視鏡和反光鏡通道、//駕駛員視點(diǎn)和場(chǎng)景模型等資源
GV_fbf_create(&fbf);
GV_chn_create(&driver_chn);
GV_chn_create(&rearview_mirror_chn);
GV_chn_create(&viewfinder_chn);
GV_cam_create(&driver_cam);
GV_scn_create(&scene);
GV_lsr_create(&sunlight);
GV_fog_create(&fog_model);
//設(shè)置多通道圖形的視口大小和遠(yuǎn)近裁剪面
static GV_Viewport driver_vp={-1.0,1.0,-1.0,1.0};
static GV_Viewport rearview_mirror_vp={-1.0,-0.5,0.5,1.0};
static GV_Viewport viewfinder_vp={0.5,1.0,0.5,1.0};
static float far_clip=5000.0;
static float near_clip=1.0;
GV_chn_set_viewport(driver_chn&driver_vp);
GV_chn_set_viewport(rearview_mirror_chn
&rearview_mirror_vp);
GV_chn_set_viewport(viewfinder_chn&viewfinder_vp);
GV_chn_set_clip_near(driver_chn,near_clip);
GV_chn_set_clip_far(driver_chn,far_clip);
/
/把視點(diǎn)和場(chǎng)景放入各個(gè)通道中
GV_chn_set_camer(driver_chn,driver_cam);
GV_chn_set_camer(rearview_mirror_chn,rearview_mirror_cam);
GV_chn_set_camer(viewfinder_chn,viewfinder_cam);
GV_chn_set_scene(driver_chn,scene);
GV_chn_set_scene(rearview_mirror_chn,scene);
GV_chn_set_scene(viewfinder_chn,scene);
//將后視鏡通道和反光鏡通道與駕駛員通道連接起來(lái)
GV_chn_add_channel(driver_chn,rearview_mirror_chn);
GV_chn_add_channel(driver_chn,viewfinder_chn);
//設(shè)置后視鏡和反光鏡通道的狀態(tài)
GV_chn_set_mirror_state(rearview_mirror_chn,G_ON);
GV_chn_set_mirror_state(viewfinder_chn,G_ON);
//把駕駛員通道放入幀緩存中
GV_fbf_add_channel(fbf,driver_chn);
現(xiàn)在,隨著計(jì)算機(jī)技術(shù)的發(fā)展,硬件成本大幅下降,為汽車駕駛訓(xùn)練模擬器提供高性能價(jià)格比的硬件平臺(tái)條件逐漸成熟。對(duì)于汽車駕駛訓(xùn)練模擬器而言,當(dāng)前正處于一個(gè)技術(shù)轉(zhuǎn)折點(diǎn)。采用新的技術(shù)途徑,將汽車駕駛訓(xùn)練模擬器的性能提高一個(gè)檔次,并在價(jià)格方面能被用戶接受時(shí),必能促進(jìn)我國(guó)車輛培訓(xùn)水平的提高和交通狀況的改善。
[1] 白燕斌,史惠康.OpenGL三維圖形庫(kù)編程指南[M].北京:機(jī)械工業(yè)出版社,1998.
[2] 吳斌,畢麗蘊(yùn).OpenGL編程實(shí)例與技巧[M].北京:人民郵電出版社,1999.