关于角色与地形的碰撞检测问题
在一个户外场景中,地形检测一般是用高差来计算地形碰撞
但是如果场景中有一座桥,怎么判断角色在桥上还是在桥下?像这种具有多层高度的场景碰撞检测是不是一般采用bsp树?
[解决办法]
把桥用一个又代表性的平面代替,角色用一个有代表性的质点来代替,这个问题就转换成了判断一个点是否在一个面的正面还是后面。
简单的方法是:
先求得平面的法线,然后求的平面任意一个顶点到这个质点的向量,把这2个向量单位化然后求内积,如果结果大于0,那么说明2个向量 夹角小于 90度,那么这个质点 就在这个平面的正面。反之则在平面 的后面
[解决办法]
这个地方没法用BSP,BSP是做室内碰撞的。
这里有两种方法,精确的检测可以用凸面体碰撞检测来实现,流行的比如GJK算法
现在国产游戏里一般用刷网格的方法,地形上刷一层网格,桥上再刷一层网格。
判断桥上还是桥下可能需要服务器再传一个值,比如表示处于第几层网格。
其实如果用现有的物理引擎就很方便了,直接就是heightfield+convex,人是一个capsule,往前一走自动就走到桥上了。参考PhysX里有一个CharacterController的例子。
[解决办法]
用物理引擎的确比较方便,呵呵
不用物理引擎的场合下,我的做法是,判断指定坐标(x,z)处是不是有可以安置角色的物品,如果有,就计算角色在物品上的高度,如果没有,就计算在地形上的高度。
[解决办法]