Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }