图4.12 汽车贴地行驶
4.4.2 汽车与房子碰撞检测
OpenGVS提供了两个物体之间的碰撞检测函数int GV_geo_inq_obi_collision( GV_Obi object1, GV_Obi object2, G_Boolean * collision_out ); OpenGVS中每个物体都会有一个包围盒,两个物体之间的碰撞检测实际上是检测物体的包围盒是否碰撞,如果有交集说明碰撞了,否则没有碰撞。当场景中物体数目很多时,这种方法不适合用于通用碰撞检测;但是对于特定的物体之间的碰撞,检测速度很快。
在本系统中,汽车和房子都是两个特定的物体,每要前进一步,先用碰撞检测函数检测前进以后是否会发生碰撞,如果有碰撞则汽车不前进,将当前没有碰撞的位置赋给汽车;否则,继续前进。
其关键代码为:
GV_geo_inq_obi_collision( vehicle, farmhouse,&collision ); //检测车与房子是否碰撞
if(collision)//如果碰撞
{
GV_obi_set_position( vehicle, &vehicle_pos );//将当前的位置赋给汽车
GV_obi_set_rotation( vehicle, &vehicle_rot );//将当前的姿态角赋给汽车
return status;
}
这个函数是在GV_user_proc()函数中调用的,所以可以实时响应。
图4.13 汽车与房子碰撞
结 论
本课题研究虚拟汽车驾驶模拟系统的开发,在开发过程中是利用OpenGVS开发平台开发的。建立一个人机交互式的界面,人可以通过键盘切换驾驶视角,通过移动鼠标来控制汽车的行驶,有较好的立体感,达到了虚拟现实的作用。取得的具体成果有以下几个(一)实现了一个可视化的人机交互平台;(二)可以在OpenGVS中导入一个地形数据库及三文模型;(三)场景的渲染;(四)通过鼠标可以控制汽车行驶及通过键盘切换驾驶视角;(五)汽车可以贴地行驶并撞上障碍物时可以停止。
尽管本课题取得了一些成果,但不可否认,本课题还是存在着一些问题的。主要体现在两个方面,第一,由于调入的地形数据库是一个整体,所以我只能通过加入一个房子实体来验证物体与物体间的碰撞,但是汽车还是可以穿过树及栅栏,这是不符合实际的;第二,在实现汽车与房子的碰撞过程中,存在bug,汽车前进的步长不能及时变小,需要缓慢下降,即会出现鼠标往回移动时,汽车可能会向前移动一小步。这其实与汽车速度设置有关。
- 上一篇:MATLAB雷达有源干扰建模与仿真+文献综述
- 下一篇:Multisim在电子电路分析中的应用研究
-
-
-
-
-
-
-
杂拟谷盗体内共生菌沃尔...
java+mysql车辆管理系统的设计+源代码
乳业同业并购式全产业链...
电站锅炉暖风器设计任务书
大众媒体对公共政策制定的影响
酸性水汽提装置总汽提塔设计+CAD图纸
河岸冲刷和泥沙淤积的监测国内外研究现状
十二层带中心支撑钢结构...
中考体育项目与体育教学合理结合的研究
当代大学生慈善意识研究+文献综述