Xna是否手动创建边界框检测?

Xna是否手动创建边界框检测?,xna,xna-4.0,bounding-box,bounding,Xna,Xna 4.0,Bounding Box,Bounding,因此,我成功地创建并测试了boundingbox。现在,我在vector[]corners=new vector[8]和vector[]corners1=new vector[8]中获得了所有8个角点,我只是想知道用什么代码来代替model.intersect(model1)。我之所以想这样做,是因为我希望我可以改变向量中的一些点,使我的模型向上倾斜。首先。。。您有一个BoundingBox结构,可以为AABB碰撞执行此操作 第二。。。如果你想自己做 如果只需要检查AABB碰撞,只需确定边界框

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

首先。。。您有一个BoundingBox结构,可以为AABB碰撞执行此操作

第二。。。如果你想自己做

  • 如果只需要检查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;
         ....
    
    }
    
  • 如果需要检查A和B对象之间的obb碰撞,则只需将B顶点转换为空间,并在空间中工作

    BVertexInASpace = B.WorldVertex.Select( v => Matrix.Transform(v, A.TransformInverted));
    
    在空间中,最小顶点是(0,0,0),最大顶点是(宽度、高度、深度),因此您只需检查BVertexInASpace顶点是否在