Я пытаюсь заставить сферу и самолет правильно столкнуться. С приведенным ниже кодом они сталкиваются, но только на некоторое время. Я в растерянности, когда дело доходит до самолетов, поэтому я должен что-то упустить из виду.
Что я пытаюсь различить при столкновении (которое происходит во время узкой фазы), это глубина, нормаль и точка контакта. Они используются позже при разрешении импульса 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());
}