내 2D 물리 엔진에서 AABB 대 AABB 충돌을 감지하고 가장 짧은 침투 벡터를 찾아 AABB 위치에 추가하여 해결할 수 있습니다.
이 작업을 수행하면 두 번째 AABB 외부의 첫 번째 AABB가 "푸시"되지만 속도 / 가속 변경은 처리되지 않습니다.
시뮬레이션에 중력 가속을 추가하면 첫 번째 동적 AABB의 속도가 두 번째 정적 AABB 위에있을 때도 계속 증가합니다. 결국 속도가 너무 커지고 충돌이 감지되지 않습니다 (동적 AABB는 정적 속도를 fall습니다).
해상도 후 속도를 0으로 설정하려고 시도했지만 분명히 잘 작동하지 않았으며 비현실적인 시뮬레이션을 만들었습니다.
나는 수동으로 위치에서 작업하거나 속도가 정확하지 않다는 것을 온라인으로 읽었습니다. 나는 힘을 구현하려고 시도했다 (질량은 "하드 코딩 된"1이다) :
void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; }
void Body::integrate(float mFrameTime)
{
velocity += acceleration * mFrameTime;
position += velocity * mFrameTime;
acceleration = {0, 0};
}
충돌 해결 중 가장 짧은 관통 벡터를 힘으로 적용하면 동적 AABB는 정적 것으로부터 "밀어 내"지지만, 중력이없는 시뮬레이션에서는 속도가 절대로 감소하지 않으며 영원히 계속 움직입니다.
"임시"힘을 적용 할 수있는 방법이 있습니까? AABB가 더 이상 충돌하지 않으면 첫 번째 AABB를 두 번째 AABB에서 밀어내는 힘이 작용합니까?
전체 소스 코드는 https://github.com/SuperV1234/SSVSCollision에서 확인할 수 있습니다.