视景仿真系统中单通道与多通道图形显示设计与实现

2013-04-16 15:48
机械管理开发 2013年3期
关键词:反光镜视景单通道

张 侃

(山西交通职业技术学院,山西 太原 030031)

0 引 言

视景系统仿真是将可视化仿真技术用于各种模拟器的视景系统中,以产生尽可能真实的场景效果,它综合利用了计算机图形学、信息论、计算机视觉、图像处理、模式识别、软件工程等科技[1]。随着计算机技术和仿真技术的发展,结合虚拟现实的视景系统仿真在航空航天、军事、交通等领域的广泛应用,将对汽车驾驶模拟图形的设计与实现做了简单介绍。

1 单通道图形显示设计与实现

单通道是按以下步骤完成:先创建了一个帧缓存、一个通道、一个视点、一个场景、多个实体对象、一个光源、一个雾化模型;再将实体对象、光源、雾化模型等添加到场景中;后将视点和场景同时加入到通道中;最后把通道加入到帧缓存中。完成后的单通道程序如下:

//定义单通道图形的帧缓存、通道、视点和场景等资源

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

//设置单通道图形的视口大小和远近裁剪面

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

2 多通道图形显示技术的实现

多通道图形显示中的各种资源间的层次关系(比单通道时)要复杂一些。整个视景系统软件采用帧缓存和一个驾驶员通道(driver)相连,驾驶员视点就设置在该通道中,并把整个视景系统的场景模型也放入这个通道,然后通过驾驶员通道与各个子通道进行连接[2]。每一个通道的视点和场景都与驾驶员通道的相同。整个视景系统经对帧缓存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);

//设置多通道图形的视口大小和远近裁剪面

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

//设置后视镜和反光镜通道的状态

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

3 结束语

现在,随着计算机技术的发展,硬件成本大幅下降,为汽车驾驶训练模拟器提供高性能价格比的硬件平台条件逐渐成熟。对于汽车驾驶训练模拟器而言,当前正处于一个技术转折点。采用新的技术途径,将汽车驾驶训练模拟器的性能提高一个档次,并在价格方面能被用户接受时,必能促进我国车辆培训水平的提高和交通状况的改善。

[1] 白燕斌,史惠康.OpenGL三维图形库编程指南[M].北京:机械工业出版社,1998.

[2] 吴斌,毕丽蕴.OpenGL编程实例与技巧[M].北京:人民邮电出版社,1999.

猜你喜欢
反光镜视景单通道
反光镜
基于联合聚类分析的单通道腹部心电信号的胎心率提取
虚拟现实技术在游戏设计中的应用及研究
基于扩频码周期性的单通道直扩通信半盲分离抗干扰算法
Get disconnected with the NoPhone
全回转拖轮运动建模与视景仿真
采用6.25mm×6.25mm×1.8mm LGA封装的双通道2.5A、单通道5A超薄微型模块稳压器
基于Vortex与Vega Prime的车辆模拟器动力学与视景仿真
低位单通道MPCNL治疗复杂肾结石28例
基于STK的卫星实时视景仿真系统设计