图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在电子电路分析中的应用研究
-
-
-
-
-
-
-
g-C3N4光催化剂的制备和光催化性能研究
中国传统元素在游戏角色...
NFC协议物理层的软件实现+文献综述
上市公司股权结构对经营绩效的影响研究
江苏省某高中学生体质现状的调查研究
C++最短路径算法研究和程序设计
巴金《激流三部曲》高觉新的悲剧命运
浅析中国古代宗法制度
高警觉工作人群的元情绪...
现代简约美式风格在室内家装中的运用