目前,我有一个小物理游戏,它使用分离轴定理进行碰撞检测和响应,但是当我发现没有太多的文档记录一个物体与另一个形状碰撞后,它的速度会发生什么变化时,我陷入了停顿。在
这是我所说的两个图表。在
谁能给我指一个正确的方向吗?在
碰撞后能给出的所有信息都是最小穿透向量。在
编辑:在网上发现了一些与此相关的代码,但我不明白:
void CBody::ProcessCollision(CBody& xBody, const Vector& N, float t)
{
Vector D = m_xDisplacement - xBody.m_xDisplacement;
float n = D * N;
Vector Dn = N * n;
Vector Dt = D - Dn;
if (n > 0.0f) Dn = Vector(0, 0);
float dt = Dt * Dt;
float CoF = s_fFriction;
if (dt < s_fGlue*s_fGlue) CoF = 1.01f;
D = -(1.0f + s_fRestitution) * Dn - (CoF) * Dt;
float m0 = GetInvMass();
float m1 = xBody.GetInvMass();
float m = m0 + m1;
float r0 = m0 / m;
float r1 = m1 / m;
m_xDisplacement += D * r0;
xBody.m_xDisplacement -= D * r1;
}
碰撞检测和如何处理碰撞是两个独立的问题。在
碰撞后会发生什么取决于你想达到什么样的物理效果。在
例如,在你的上图中,我们假设红色部分是一堵无法移动的墙,只有蓝色的部分在移动。蓝色部分的运动矢量已经被分割成与红墙表面平行和垂直的正交部分。在这种情况下处理碰撞的一个简单方法是简单地翻转垂直于壁面的速度向量的分量。所以向量[-4,10]会变成[4,10]。在
相关问题 更多 >
编程相关推荐