视景仿真系统中单通道与多通道图形显示设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
视景仿真系统中单通道与多通道图形显示设计与实现
张侃
(山西交通职业技术学院山西太原030031)
摘要:视景系统仿真就是将可视化仿真技术应用于各种模拟器的视景系统中,以产生尽可能真实的场景效果,它综合利用了计算机图形学、信息论、计算机视觉、图像处理、模式识别和软件工程等理论和应用技术,本文对汽车驾驶模拟图形的设计与实现做了简单的介绍。
关键词:计算机视景仿真;单通道;多通道
一、引言
视景系统仿真就是将可视化仿真技术应用于各种模拟器的视景系统中,以产生尽可能真实的场景效果,它综合利用了计算机图形学、信息论、计算机视觉、图像处理、模式识别和软件工程等理论和应用技术。随着计算机技术和仿真技术的发展,结合虚拟现实的视景系统仿真在航空航天、军事、交通等领域得到了广泛的应用,本文对汽车驾驶模拟图形的设计与实现做了简单的介绍。
二、单通道图形显示设计与实现
论文中的单通道是按以下步骤来完成的。首先创建了一个帧缓存、一个通道、一个视点、一个场景、多个实体对象、一个光源和一个雾化模型;接着将实体对象、光源和雾化模型等添加到场景中;然后再将视点和场景同时加入到通道中;最后把通道加入到帧缓存中。完成后的单通道程序如下:
//定义单通道图形的帧缓存、通道、视点和场景等资源
GV_Fbf fbf;
GV_Channel parent;
GV_Camera eye_camera;
GV_Scene scene;
GV_Light sunlight;
GV_Fog fog;
//创建单通道图形的帧缓存、通道、视点和场景等资源
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);
//设置单通道图形的帧缓存、通道、视点和场景等资源的名字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”);
//将光源和雾的模型加入到场景中
GV_scn_add_light(scene,sunlight);
GV_scn_add_fog(scene,fog);
//设置单通道图形的视口大小和远近裁剪面
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);
程序实现后的场景如图1所示:
图1单通道技术实现的场景
三、多通道图形显示技术的实现
多通道图形显示中各种资源之间的层次关系比单通道时要复杂一些。整个视景系统软件采用帧缓存和一个驾驶员通道(driver)相连,驾驶员视点就设置在该通道中,同时还把整个视景系统的场景模型也放入到这个通道,然后通过驾驶员通道与各个子通道进行连接。每一个通道的视点和场景都与驾驶员通道的相同。整个视景系统通过对帧缓存fbf树型结构的维护处理来完成整个系统的同步更新、访问控制和恢复系统功能等。
整个视景系统软件创建了一个帧缓存、一个驾驶员通道(驾驶员视野或者是挡风玻璃外场景通道)、两个子通道(后视镜和反光镜通道)、一个驾驶员通道视点、视景系统的场景模型和其中的对象实体、一个光照和一个雾化模型;将各个对象实体、光照模型和雾化模型加入场景模型;然后将视点和场景放入相应的通道,并把各个子通道添加到驾驶员通道中,最后把驾驶员通道连接到帧缓存中。
多通道图形显示的程序如下:
//定义多通道图形的帧缓存、通道、视点、场景资源
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;
//创建多通道图形的帧缓存、驾驶员通道、后视镜和反光镜通道、//驾驶员视点和场景模型等资源
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);
//设置多通道图形的帧缓存、驾驶员通道、后视镜和反光镜通道、//驾驶员视点和场景模型等资源的名字
GV_fbf_set_name(fbf,“FBF”);
GV_chn_set_name(driver_chn,“DRIVER_CHN”);
GV_chn_set_name(rearview_mirror_ch,
“REARVIEW_MIRROR_CHN”);
GV_chn_set_name(viewfinder_chn,
“VIEWFINDER_CHN”);
GV_cam_set_name(drive_cam,“DRIVER_CAM”);
GV_scn_set_name(scene,“SCENE”);
GV_lsr_set_name(sunlight,“SUN”);
GV_fog_set_name(fog_model,“FOG”);
//向图形中添加场景模型、光照模型和雾化模型
GV_scn_add_object(scene,scene_model);
GV_scn_add_object(scene,skydome);
GV_scn_add_light(scene,sunlight);
GV_scn_set_fog(scene,fog_model);
//设置多通道图形的视口大小和远近裁剪面