我们正在为我们学校的项目构建一个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;
}
但这会导致一个大问题:我们不能让玩家高于大玩家,因为这一切都取决于边界框的“半径”。
所以我的问题是,如何修改此代码以便实际使用边界框正确测试碰撞?
谢谢。