一般游戏中都要涉及物体运动之间的交互。相比之下2D画面中的碰撞检测要容易的多,无论是采用像素判断还是使用物体面积与距离判断都是可行的。
但是问题到3D游戏中就有很大的麻烦。对于PC机的运算能力,几乎不可能使用检测每个物体的多边形和顶点的穿透,那样的运算量对PC来讲几乎是不可完成的。所以PC游戏上使用的碰撞检测不可能使用太精确的检测。而且对于3D碰撞检测问题,还没有几乎完美的解决方案。目前只能采取根据需要来取舍运算速度和精确性。
目前成功商业3D游戏普遍采用的碰撞检测是采用BSP树及包装盒方式。简单讲就是采用一个描述用的正方体或者球型体包裹住3D物体对象整体(或者是主要部分),之后根据“描述用”包装盒的距离、位置等信息来计算是否发生碰撞。当然除了球体和正方体以外,其他形状也可以作包装盒,但是相比计算量和方便性来讲 还是前边两中形状更方便些,所以其他形状的包装只用在一些特殊部分使用。BSP树是用来控制检测顺序和方向的数据描述。因为在一个游戏场景中可能存在很多物体,他们之间大多属于较远位置或者相对无关的状态,一个物体的碰撞运算没必要遍历这些物体,同时节省重要的时间。
我们今天主要讨论的不是这种3D碰撞检测方式。因为我们是对初学3D编程的人员写的这篇文章。目的在于使大家简单建立自己的3D场景,而不用在开始就把大量精力消耗在碰撞检测问题上,从而把注意力放在基础的图形编程之上。
本文地址:http://com.8s8s.com/it/it41280.htm