Обнаружение столкновения сферы / плоскости - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь заставить сферу и самолет правильно столкнуться. С приведенным ниже кодом они сталкиваются, но только на некоторое время. Я в растерянности, когда дело доходит до самолетов, поэтому я должен что-то упустить из виду.

Что я пытаюсь различить при столкновении (которое происходит во время узкой фазы), это глубина, нормаль и точка контакта. Они используются позже при разрешении импульса et c.

Проблема в том, что расстояние становится <0 после нескольких итераций (сфера катится, а затем просто уходит под плоскость). </p>

    auto distance = glm::dot(sphere->GetPosition() - glm::vec3(planeCollider->GetDistance()), planeCollider->GetNormal());
    auto normal = planeCollider->GetNormal() * distance;

    if (distance < 0.0f)
    {
        return false;
    }

    if (distance == 0.0f)
    {
        penetrationDepth = sphereCollider->GetRadius();
        contactNormal = glm::vec3(0.0f, 1.0f, 0.0f);
        contactPoint = bodyA->GetPosition();
    }
    else
    {
        penetrationDepth = sphereCollider->GetRadius() - distance;
        contactNormal = normal;
        contactPoint = normal * (distance - sphereCollider->GetRadius());
    }
...