边界框碰撞xna c#

时间:2013-03-04 15:14:23

标签: c# xna collision bounding-box

我不清楚如何设置这个我需要的盒子而不是球体在这种情况下,因为我想知道激光是否在我的3D场景中击中敌人的船只。这是我的球体代码如何将其更改为边界框。因为如果我使用球体进行激光测量,即使球体远离实际的激光,球体也会很大并撞到船上。我要问的是如何以这种方式设置边框。

private bool Cannonfire(Model model1, Vector3 world1, Model model2, Vector3 world2)
        {
            for (int meshIndex1 = 0; meshIndex1 < model1.Meshes.Count; meshIndex1++)
            {
                BoundingSphere sphere1 = model1.Meshes[meshIndex1].BoundingSphere;
                sphere1.Center = world1;
                for (int meshIndex2 = 0; meshIndex2 < model2.Meshes.Count; meshIndex2++)
                {        
                    BoundingSphere sphere2 = model2.Meshes[meshIndex2].BoundingSphere;
                    sphere2.Center = world2;
                    if (sphere1.Intersects(sphere2))
                        return true;
                }
            }
            return false;
        }   

所以我多么感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

听起来你需要的是可用于在XNA中与BoundingSpheres和BoundingBox交叉的光线。它们本质上是一条直线或梁,您可以通过将起始位置和方向传入构造函数来指定。然后,您可以调用Intersects方法并传入BoundingBox或Sphere。在你的例子中,它将是这样的。

Ray laserBeam = new Ray(startingPosition, direction);
laserBeam.Intersects(shipBoundingSphere);

请注意,intersects返回一个可以为空的浮点值。如果没有碰撞,则它将为null,或者如果存在碰撞,则浮点值指示距离光线startingPosition的距离。

此浮动值可用于计算哪些潜在目标最接近射线,例如,您在船上循环,一艘船与浮点值3碰撞但另一艘船碰撞浮点值为5.您知道值3的船最接近激光束的来源,所以你可以忽略其他的。

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.ray.intersects.aspx