关于3D游戏碰撞系统的构建,不同的游戏类型差别很大。如极品飞车,HL2这些运动类、FPS的游戏,需要非常精确的碰撞计算,刚体运动等等,好的解决方案就是采用一个成熟的物理引擎。对于WOW这类角色扮演的游戏,精确的碰撞不是它最想要表现的方面。因为采用物理引擎会占用过多的CPU资源,考虑到效率,这类的游戏一般采用简化的碰撞系统。
该碰撞系统的构建最核心的内容就是物理世界的构建。物理世界不关心渲染,只考虑模型在世界空间中的位置,形状等信息。我简要的描述下碰撞检测的过程
1 在模型(包括地形)在场景中加载的时候把对应的低摸顶点数据取出,用特定的数据结构来管理(可以是八叉树,BSP等)。当模型从场景中卸载时,同样卸载对应的低模数据,这个过程最好放在后台线程来处理
2 对于需要进行碰状检测的实体,先让它与碰撞低模的包围盒检测,通过了包围盒再进行精确的三角形检测(这个过程有许多的方法)
3 根据碰撞检测的结果,改变实体运动的方法,速度等。
4 服务器怪物寻路需要做简单的遮挡,碰撞检测。需要碰撞系统根据低模数据导出一张灰度图。室内的寻径可以采用可视点的方法。