0
我使用這種方法實現了一個簡單的AABB vs球體碰撞from gamedev。 當球與四面八方碰撞時,它可以正常工作。AABB vs球體碰撞
問題是球體不會滑到盒子邊緣。這意味着當球體沿-y方向落在箱子的邊緣上時,它將再次沿+ y方向運動。見下圖(碰撞後拍攝)。
我認爲問題是在這種情況下contactnormal是總是[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);
}
然後數據被轉發到我的碰撞響應。