2013-04-14 98 views
0

所以我设法创建并成功测试了boundingbox。我现在已经在vector[] corners = new vector[8]vector[] corners1 = new vector[8]中获得了所有8个角点,只是想知道代码将代替model.intersect(model1)。之所以我想这样做,是因为希望我可以改变矢量中的某些点来让我的模型上坡。Xna手动创建边界框检测?

回答

0

首先...你有一个BoundingBox的结构是会为你的AABB碰撞....

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

其次......如果你想自己做,

  1. ,如果你只需要检查AABB的碰撞,只需要确定分钟,并在边框每个顶点的最大COORDS与边界的最小和最大比较...

    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顶点转换为空间和工作在一个空间

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

    的空间最小顶点(0 ,0,0),最大顶点是(宽度,高度,深度),所以你只需要检查BVertexInASpace顶点是否在内部...