检测球体和三角形之间的碰撞

问题描述

我正在尝试检测C ++和OpenGL中的球体和三角形之间的碰撞,但是遇到了麻烦。我从《实时碰撞检测》一书中获得了这种方法,但是这会引起很多错误标记,并且某些方法无法正常工作。如何准确检测球体和三角形之间的碰撞?

这是我在代码中感到疲倦的地方,该函数采用球体的位置,半径和3个三角形顶点:

bool CollisionHelper::isSphereIntersectingTriangle(glm::vec3 sphere,float radius,glm::vec3 tri1,glm::vec3 tri2,glm::vec3 tri3)
{
    float dist1 = glm::sqrt((sphere.x - tri1.x) * (sphere.x - tri1.x) + (sphere.y - tri1.y) * (sphere.y - tri1.y) + (sphere.z - tri1.z) * (sphere.z - tri1.z));
    float dist2 = glm::sqrt((sphere.x - tri2.x) * (sphere.x - tri2.x) + (sphere.y - tri2.y) * (sphere.y - tri2.y) + (sphere.z - tri2.z) * (sphere.z - tri2.z));
    float dist3 = glm::sqrt((sphere.x - tri3.x) * (sphere.x - tri3.x) + (sphere.y - tri3.y) * (sphere.y - tri3.y) + (sphere.z - tri3.z) * (sphere.z - tri3.z));
    float closestDist = glm::min(glm::min(dist1,dist2),dist3);
    glm::vec3 v;
    if (closestDist == dist1)
        v = tri1 - sphere;
    else if (closestDist == dist2)
        v = tri2 - sphere;
    else (closestDist == dist3)
        v = tri3 - sphere;
    return glm::dot(v,v) <= radius * radius;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)