我不清楚如何设置这个我需要的盒子而不是球体在这种情况下,因为我想知道激光是否在我的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;
}
所以我多么感谢你的帮助。
答案 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