所以利用OpenGVS开发虚拟驾驶平台,正是利用其功能的强大性。在OpenGL中生成一个图形是很困难的,而运用OpenGVS则不必考虑这些问题,可以直接的调用,从而使得开发平台更加的模块化、集成化。
3 系统开发总体思路
虚拟汽车驾驶模拟系统开发的总体思路是如何运用虚拟现实技术实现汽车在虚拟地理环境中行驶。首先建立一个空的结构,使得系统有一个开发的框架。然后加入场景资源、相机资源、通道资源、地形、光资源、雾资源和汽车模型等资源,但这仅仅是需要加入的必要资源,加入后并没有真正的关联起来,所以必须调用相应的函数使得这些资源能够关联起来,形成一个统一的整体。最后一部分才是具体的操作,如如何使得汽车能够运动起来,并且它能够根据地形的变化,紧贴着地面行驶;利用物体间的碰撞检测技术使得汽车撞到物体后能够停止下来,而不会出现“穿”过去的现象,因为这是既不符合现实世界的。本系统添加了用户切换相机视角的功能,使得系统更加的逼真。这就是本课题的基本开发思路。
虚拟汽车驾驶模拟系统的开发流程图如图3.1:
图3.1 系统开发流程图
4 系统开发的关键技术
虚拟汽车驾驶模拟系统的开发过程主要是围绕着关键技术,关键技术的解决路线,也就是系统开发的主要路线。下面先简单列举下本系统的一些关键技术:(一)基本资源的创建;(二)三文模型的导入;(三)鼠标的控制;(四)碰撞检测。
4.1 基本资源的创建
4.1.1 相机资源的创建
相机资源是虚拟汽车驾驶模拟系统的必要资源,它就好比人的眼睛,没有它就什么也看不清。在OpenGVS应用软件中,相机用于动态观察控制。相机作为OpenGVS的一个软件资源,有时泛指“眼点”或“视点”。几乎每一个OpenGVS应用软件都至少需要一个相机,运行时通过操纵相机来观察三文或二文世界。在OpenGVS中只需调用函数GV_cam_create就可以很容易的创建相机资源,如函数GV_Camera new_camera;GV_cam_create( &new_camera ); 这样就创建了一个相机,可用句柄new_camera来引用它。要想使得相机能够正常的看到物体,设置它的位置和角度是很重要的。OpenGVS在提供了设置相机位置及角度的函数GV_cam_set_position();GV_cam_set_rotation();。
在本程序中设置了相机资源camera,它是为了观察汽车的。创建相机资源在函数GV_Camera gfx_init_cameras( void )中完成。相机在OpenGVS中是非常重要的,本系统的相机资源camera是程序中用于观察的,为了能够观察到汽车,必须将这个相机资源与汽车建立关联,其方法是将这个相机附到汽车上,让它可以找到汽车并且能够随它运动而运动,在实现中必须用到函数GV_cam_add_mountable_obi( camera,car );GV_cam_set_mount_obi( camera,car );如果不这样做,则可能出现找不到汽车资源,或者能够找到汽车但汽车运动后会逐渐的远离并直至看不到。
在OpenGVS中相机观察三文物体有两种形式,一种是相机资源不随三文物体的移动而移动,这样三文物体会逐渐远离;另一种是相机资源随着三文物体的移动而移动,这样三文物体就永远在相机视线内。本系统采用的是后者,并且为了方便用户使用,本系统还增加了切换相机视角的功能。而切换相机的观察视角,实际上是改变相机资源camera的位置,从而改变观察效果。刚开始在默认位置时,camera的位置在汽车外的某个地方,并且已经和汽车建立关联了。而切换后,相机的位置会转移到汽车的驾驶室内,这样就好比真实世界的驾驶。其关键代码为: 基于OpenGVS的虚拟汽车驾驶模拟系统的开发(5):http://www.youerw.com/tongxin/lunwen_1612.html