public override double GetHitPointDistance(Ray r) { double ret = RayPlane.GetHitPointRayPlaneDistance(r.Origin, r.Direction, Position, LookAt); if (ret <= Constants.EPS) { return(double.PositiveInfinity); } return(ret); }
/// <summary> /// Evaluate one side of the cube for collision /// </summary> /// <param name="ray"></param> /// <param name="normal"></param> /// <param name="center"></param> /// <returns></returns> private double SideRayIntersectionDistance(Shapes.Ray ray, Vect3 normal, Vect3 center) { var distance = RayPlane.GetHitPointRayPlaneDistance(ray.Origin, ray.Direction, center, normal); if (double.IsInfinity(distance)) { return(distance); } var relativeHitPoint = (ray.Origin + (ray.Direction * distance)) - center; if (relativeHitPoint.X <= _halfWidth && relativeHitPoint.Y <= _halfWidth && relativeHitPoint.Z <= _halfWidth) { return(distance); } return(double.PositiveInfinity); }