Example #1
0
        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;
        }
Example #2
0
        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);
        }
Example #3
0
 internal void Update(OBB box)
 {
     Vector3[] aux = box.GetCorners();
     for (int i = 0; i < 8; i++)
     {
         vertexes[i] = new VertexPositionColor(aux[i], Color.Green);
     }
 }