0

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

4

1 回答 1

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),最大顶点为 (width, height, depth),因此您只需检查 BVertexInASpace 顶点是否在内部...

于 2013-04-14T23:42:04.553 回答