物理引擎最基本流程:1.检测所有物体之间的碰撞(contact,包含的信息有,碰撞点,碰撞法线,穿透深度信息)。在碰撞过程中有很复杂的优化过程,这里基本可以决定一个物理引擎的速度和承载能力了。
2.对碰撞检测过程计算的contact进行响应 ,只对刚体的单个碰撞过程进行解释。
先看下面的基本理论:
:加速度 = 力/质量
:角加速度 = 力矩/转动惯量
:力矩的计算公式(原点到力作用点的向量 X 力)
这是最基本的力作用产生的效果的公式,但是在处理刚体的碰撞过程却不能用上,这是个瞬间的过程,我们需要对这个过程进行积分,这个过程基本上被抛弃,所以我们从动量,冲量的角度来思考这个问题。因此我们有:
Mv = ft (动量,冲量之间的关系)
同理,我们在转动过程中有冲量矩,
:冲量矩 = 转动惯量 * 角速度改变量
解决碰撞问题的过程,我们首先考虑碰撞点的变化,我们可以采用 ,这里不考虑摩擦,所以作用只是在碰撞法线向量中。
此时我们知道碰撞前后,碰撞点的速度该变量为dV:-CVs + Vs(Mark一下,后面需要用)
我们需要知道的是在这个碰撞过程中施加了多少冲量才能使这个碰撞点产生这样的速度改变呢?在这里,我们假设这个过程只有单位冲量作用在上面,我们计算出单位冲量使碰撞点产生的速度改变量g,那么碰撞过程的冲量自然等于dV/g.最后我们将计算出的冲量分别作用的线性,和转动上面,产生速度改变,最用根据修改后的速度,计算新的方位。完成作用过程。
如果计算g呢?先线性角度考虑,对于单位冲量改变的线性速度为:1/m1 + 1/m2.(刚体1的速度改变+刚体2的速度改变)
旋转角度思考,
冲量矩 = 碰撞点相对位置 X 力方向(此时为contact的法线)
那么角速度改变量 = 冲量矩 / 转动惯量
线速度该变量 = 角速度 X 碰撞点相对位置
这里我们考虑的是碰撞法线方向的速度该变量,所以还要投影的法线方向
那么我们可以清楚的知道,单位冲量产生的速度该变量 = 线性速度该变量 + 旋转产生的速度改变。
因为是相对的,所以最终速度改变量 = 刚体1的速度改变量 + 刚体2的速度改变量(如果碰撞2为静止的,那么不用计算)
纯属整理的学习日志,还有很多细节需要考虑,比如多碰撞点的,静止问题,穿透问题等等需要考虑,这些后面有时间再写~