边缘上的AABB与球体碰撞

时间:2014-09-03 08:44:30

标签: javascript physics

我使用此方法from gamedev实现了简单的AABB与Sphere碰撞。 当球体从四面八方与盒子碰撞时,它工作正常。

问题是球体不会滑动盒子的边缘。当球体落在-y方向上的方向碰撞在盒子的边缘时,它将再次向+ y方向移动。见下图(碰撞后拍摄)。

我认为问题在于,在这种情况下,接触正常总是[0,1,0]。如何实现更真实的行为? 对于矢量计算,我使用的是glMatrix

var delta = vec3.create();
vec3.subtract(delta, centerRelSphereAABB, closestPoint);
distance = vec3.length(delta);

if(distance < C.radius){

    penetrationDepth = C.radius - distance;

    contactNormal = vec3.create();
    vec3.subtract(contactNormal, delta, A.centerOfMass);
    vec3.normalize(contactNormal, delta);

    //contact point
    contactPoint = vec3.create();
    vec3.scale(contactPoint, contactNormal, C.radius - penetrationDepth);
    vec3.subtract(contactPoint, model_1.centerOfMass, contactPoint);
}

然后将数据转发给我的碰撞响应。

enter image description here

1 个答案:

答案 0 :(得分:0)

疏通你的联系方式。当对象是球体时,您在开始时具有的矢量Delta是碰撞法线。你必须将其标准化,并可能否定它,但它正朝着正确的方向发展。

在其他形状的一般情况下不正确......

相关问题