internal DebugBox(OBB box) { vertexes = new VertexPositionColor[8]; indexes = new short[24]; Vector3[] aux = box.GetCorners(); //TODO: CLEAN THIS for (int i = 0; i < 8; i++) { vertexes[i] = new VertexPositionColor(aux[i], Color.Green); } indexes[0] = 0; indexes[1] = 1; indexes[2] = 1; indexes[3] = 2; indexes[4] = 2; indexes[5] = 3; indexes[6] = 3; indexes[7] = 0; indexes[8] = 0; indexes[9] = 4; indexes[10] = 4; indexes[11] = 5; indexes[12] = 5; indexes[13] = 6; indexes[14] = 6; indexes[15] = 7; indexes[16] = 7; indexes[17] = 4; indexes[18] = 5; indexes[19] = 1; indexes[20] = 6; indexes[21] = 2; indexes[22] = 7; indexes[23] = 3; }
internal static bool IntersectsWhenProjected(OBB a, OBB b, Vector3 axis) { //if a cross product returns zero, then the vectors are alined if (axis == Vector3.Zero) { return(true); } float aMin = float.MaxValue; float aMax = float.MinValue; float bMin = float.MaxValue; float bMax = float.MinValue; for (int i = 0; i < 8; i++) { float aDist = Vector3.Dot(a.GetCorners()[i], axis); aMin = (aDist < aMin) ? aDist : aMin; aMax = (aDist > aMax) ? aDist : aMax; float bDist = Vector3.Dot(b.GetCorners()[i], axis); bMin = (bDist < bMin) ? bDist : bMin; bMax = (bDist > bMax) ? bDist : bMax; } //1d test for intersection of a and b float longSpan = Math.Max(aMax, bMax) - Math.Min(aMin, bMin); float sumSpan = aMax - aMin + bMax - bMin; return(longSpan < sumSpan); }
internal void Update(OBB box) { Vector3[] aux = box.GetCorners(); for (int i = 0; i < 8; i++) { vertexes[i] = new VertexPositionColor(aux[i], Color.Green); } }