Xna手动创建BoundingBox检测?

时间:2013-04-14 22:05:44

标签: xna xna-4.0 bounding-box bounding

所以我设法创建并成功测试了boundingbox。我现在已经在vector[] corners = new vector[8]vector[] corners1 = new vector[8]中获得了所有8个角点,只是想知道代码是什么而不是model.intersect(model1)。我想这样做的原因是因为希望我可以改变向量中的一些点以使我的模型上坡。

1 个答案:

答案 0 :(得分:0)

首先......你有一个BoundingBox结构为你做AABB碰撞....

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

第二......如果你想自己做,

  1. 如果你只需要检查AABB碰撞,只需要确定边界框中每个顶点的最小和最大坐标,以便与边界最小值和最大值进行比较......

    foreach (vertex in vertices) {
        Min.X = Min(Min.X, vertex.X);
        Min.Y = Min(Min.Y, vertex.Y);
        ....
        // Idem for max
    }
    
    bool collide(BoundingBox other)
    {
         if (min.X > other.max.X) return false;
         if (min.y > other.max.y) return false;
         ....
    
    }
    
  2. 如果你需要检查A和B对象之间的obb碰撞,你只需要将B顶点转换为A空间,并在A空间中工作

    BVertexInASpace = B.WorldVertex.Select( v => Matrix.Transform(v, A.TransformInverted));
    

    在A空间中,最小顶点为(0,0,0),最大顶点为(宽度,高度,深度),因此您只需检查BVertexInASpace顶点是否在...