fish的小屋

fish的小屋

导航

人物控制,沿墙滑动跳跃的实现

完成了包围体(我用的是胶囊)和三角形的碰撞,胶囊和Bsp,地形的碰撞检测之后,终于开始进入正题,人物在场景中的移动控制,包括跳跃,沿墙滑动等。需要做到这些碰撞检测需要提供给控制器至少3条信息,1。碰撞时间。2。碰撞法向量。3。碰撞点。
    先看沿墙滑动,目前很多文章都有对其进行解决的方法,有的通过物理,有的通过pick4条射线获取地面信息等等,这些都不好,其实方法最好的只有一条原则,记住这点一切都能迎刃而解,那就是,
1。人物要么只能沿着一个面行走,
2。要么只能研着2个面的交线行走。
情况1出现在人物只在一个面上行走。
情况2出现在人物在水平行走时不但在一个可行走得面上还撞到了一个不可行走的面(墙面)
由于知道了碰撞的法向量,也就是说知道了那个可行走平面以及不可行走平面的法向量,交线,就是他们的差积,非常简单然后检查差积的倾斜角是否可以行走。如果可以行走那么研着交线行走,否则研着交线下滑,同时要在每帧算上重力引起的下滑速度变化
那么如果存在n个可行走平面以及m个不可行走平面时怎么办呢,方法一样:
1。首先将速度在n个可行走平面上分解,检查这些分解的速度是否有效(如何判断速度有效下面会说道)
2。如果在1的时候存在一个有效的速度直接返回该速度
3。没有有效速度,这是检查nXM个平面的交线,将速度在上面分解同时检查是否存在有效速度
4。如果存在有效速度返回该速度
5。否则检查MXM条交线的,将速度在上面分解同时检查是否存在有效速度
6。如果存在有效速度返回该速度
7。否则返回0速度
那么如何判定速度是否有效呢,首先我们知道了所有碰撞的信息,给定一个速度,如果该速度和所有碰撞的法向量的夹角都是小于90度那么这就是个有效速度,(说明该分解后速度不会引起和这些碰撞面的在一次碰撞)。如果只要有一个夹角大于90度那么该速度就是非有效速度,同时在移动时还要判断该速度的倾斜角是否大于最大下滑倾斜角
注意 5是很重要的因为2个不可行走的平面所形成的交线仍旧可能是可以行走的,甚至是水平的

posted on 2008-03-01 11:50  fish.shadow song(若愚.影歌)  阅读(229)  评论(0编辑  收藏  举报