/// <summary>
        /// Detecta la intersección entre una caja y un plano
        /// </summary>
        /// <param name="box">Caja</param>
        /// <param name="normal">Normal del plano</param>
        /// <param name="d">Distancia del plano</param>
        /// <returns>Devuelve verdadero si hay intersección</returns>
        public static bool BoxAndPlane(CollisionBox box, Vector3 normal, float d)
        {
            // Proyectar la caja sobre la normal del plano
            float projectedBox = box.ProyectToVector(normal);

            // Obtener la distancia del centro de la caja al plano sobre la normal
            float boxDistance = Vector3.Dot(normal, box.Position) - projectedBox;

            // Si la distancia es menor a d, hay intersección
            return(boxDistance <= d);
        }
        /// <summary>
        /// Obtiene si hay superposición de las cajas sobre el eje especificado
        /// </summary>
        /// <param name="one">Caja primera</param>
        /// <param name="two">Caja segunda</param>
        /// <param name="axis">Eje</param>
        /// <param name="toCentre">Vector de separación entre centros</param>
        /// <returns>Devuelve verdadero si hay superposición</returns>
        private static bool OverlapOnAxis(CollisionBox one, CollisionBox two, Vector3 axis, Vector3 toCentre)
        {
            // Proyectar las extensiones sobre el eje
            float oneProject = one.ProyectToVector(axis);
            float twoProject = two.ProyectToVector(axis);

            // Projectar el vector entre los centros en el eje
            float distance = Math.Abs(Vector3.Dot(toCentre, axis));

            // Si la distancia entre centros es mayor que la suma de las proyecciones, no hay intersección
            return(distance < oneProject + twoProject);
        }
        /// <summary>
        /// Obtiene la penetración de las proyecciones de las cajas en el eje especificado
        /// </summary>
        /// <param name="one">Caja uno</param>
        /// <param name="two">Caja dos</param>
        /// <param name="axis">Eje</param>
        /// <param name="toCentre">Distancia entre centros</param>
        /// <returns>Devuelve la penetración de las proyecciones de las cajas sobre el eje.</returns>
        private static float PenetrationOnAxis(CollisionBox box, Triangle tri, Vector3 edge, Vector3 toCentre)
        {
            // Proyectar las extensiones de cada caja sobre el eje
            float oneProject = box.ProyectToVector(edge);
            float twoProject = tri.ProyectToVector(edge);

            // Obtener la distancia entre centros de las cajas sobre el eje
            float distance = Convert.ToSingle(Math.Abs(Vector3.Dot(toCentre, edge)));

            // Positivo indica solapamiento, negativo separación
            return(oneProject + twoProject - distance);
        }