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