OpenGL地形碰撞检测

时间:2011-12-03 12:52:29

标签: c++ opengl collision terrain heightmap

好的,我有一些程序生成的地形(松散地基于http://www.swiftless.com/terraintuts.html

我有一个茶壶“飞机”你可以飞来飞去(第三人称相机)

基本上,目的是飞越山谷等......而不会崩溃。

我无法解决的是如何计算你是否与地形相撞?

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

地形图特别容易测试碰撞,因为地形图是从该点的2d点(x,y)到地形高度TERRAIN [x,y]的地图。鉴于您的茶壶平面位于(t_x,t_y,t_z),只需测试其高度(t_x,t_y)的地形高度。也就是说,如果t_z< TERRAIN [x,y],然后你就崩溃了。您可以针对地形测试多个点(可能是以茶壶中心为中心的立方体的角),以提供更准确的结果。根据地形图的粗糙度,您可以选择附近的网格点,或线性插值以计算任意点处地形的高度。

答案 1 :(得分:0)

有完整的书籍专门用于碰撞检测,但在我正在进行的一个简单的游戏中,我通过为定义其边界球体的每个实体创建半径来处理碰撞检测。在每个帧中,将所有实体与所有其他实体进行比较以找到它们之间的距离,并且如果距离小于两个实体的组合半径,则记录碰撞。

为了做到这一点,我让每个类(例如火箭,怪物,玩家,树等)都是类Entity,它为碰撞发生时保存逻辑,这意味着当火箭发射时它可以杀死怪物,但只能燃烧一棵树(假设我有火箭和树木实体)。

我遵循的一本好书更详细地解释了很多内容:

http://www.amazon.co.uk/Beginning-OpenGL-Game-Programming-Second/dp/159863528X/ref=dp_ob_title_bk