2013-04-14 144 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頂點是否在內部...