示例#1
0
        public bool IntersectsRay(ref SSRay worldSpaceRay, out float distanceAlongRay)
        {
            float distanceToSphereOrigin = OpenTKHelper.DistanceToLine(
                worldSpaceRay, this.center, out distanceAlongRay);

            return(distanceToSphereOrigin <= this.radius);
        }
示例#2
0
        public override bool Intersect(ref SSRay worldSpaceRay, out float distanceAlongRay)
        {
            // transform the ray into object space
            float localDistanceAlongRay;

            SSRay localRay = worldSpaceRay.Transformed(this.worldMat.Inverted());

            float distanceToSphereOrigin = OpenTKHelper.DistanceToLine(localRay, Vector3.Zero, out localDistanceAlongRay);

            distanceAlongRay = localDistanceAlongRay * this.Scale.LengthFast;
            bool result = distanceToSphereOrigin <= this.radius;

#if false
            Console.WriteLine("_____________________________");
            Console.WriteLine("sphere intersect test {0}   vs radius {1}", distanceToSphereOrigin, radius);
            Console.WriteLine("worldray {0}", worldSpaceRay);
            Console.WriteLine("localray {0}", localRay);
            Console.WriteLine("objectPos {0}", this.Pos);

            if (result)
            {
                Console.WriteLine("     ----> hit <-----");
                Console.WriteLine("----------------------------");
            }
            else
            {
                Console.WriteLine("          miss");
                Console.WriteLine("----------------------------");
            }
#endif

            return(result);
        }