XNA BoundingBox到顶点碰撞检测

时间:2014-06-18 20:10:55

标签: xna collision-detection collision vertex bounding-box

我们正在为我们学校的项目构建一个3D FPS游戏,我们在进行精确的碰撞检测方面遇到了一些问题。 事实上,我们正在使用这个库http://dev.theomader.com/projects/collidable-model/来检测它们,因为它非常有效。但是,我们必须发送到此库中的方法来测试碰撞的默认“框”是一个BoundingSphere,但我们想测试与BoundingBox的碰撞(例如,播放器将表示为BoundingBox我们将用模型测试它

我已经到了可以通过修改代码将边界框发送到库的地步,但此时,我不知道该做什么,以便边界框实际上作为一个。事实上,我现在计算碰撞就好像它是一个边界组织。自己看:

private bool nodeCollisions(BoundingBox b, BspNode node)
{
    float radius = Vector3.Distance(b.Min, b.Max) / 2;
    float squaredBoundingSphereRadius = radius * radius;
    Vector3 center = b.Min + (b.Max - b.Min) / 2;

    foreach (int i in node.faces)
    {
        Face face = mGeometry.faces[i];
        Vector3 pos1, pos2, pos3;
        pos1 = mGeometry.vertices[face.v1];
        pos2 = mGeometry.vertices[face.v2];
        pos3 = mGeometry.vertices[face.v3];

        // check collision with triangle bounding sphere first
        if (b.Intersects(face.boundingSphere) == false)
        {
            continue;
        }

        Vector3 closestPoint = closestPointInTriangle(center, pos1, pos2, pos3);
        float squaredDist = (closestPoint - center).LengthSquared();
        if (squaredDist <= squaredBoundingSphereRadius)
        {
            return true;
        }

    }

    return false;
}

但这会导致一个大问题:我们不能让玩家高于大玩家,因为这一切都取决于边界框的“半径”。

所以我的问题是,如何修改此代码以便实际使用边界框正确测试碰撞?

谢谢。

0 个答案:

没有答案