FW:http://www.azure.com.cn/article.asp?id=217
碰撞一般分成两个部分,碰撞的检测和碰撞的响应。
碰撞的检测前面已经说过了,无非就是射线与三角形求交。
当已经检测有碰撞发生了以后,你当然不能让主角停在原地不动了吧,
所以当主角与墙壁发生碰撞以后,让主角沿墙壁滑动就显得相当的重要了。
其实这个算法很简单,见下图:
假设当前速度为V,当前坐标为p1,通过速度V我们可以求出p2点,
所以p1,p2两点组成一条线段,首先检测碰撞,即p1,p2组成的线段是否与平面相交
如果已经相交,则进行碰撞处理:
1 - 先求出p2到平面的距离d
2 - 将d 乘以 面的法线N,得到向量v1
3 - 得到向量 (p2 - O) = v3
4 - 所以如图 v0 = v1 + v3
所以v0即为沿墙壁滑动的向量,所以最终的滑动的位置 p3 = O + v0
滑动就这么简单。