public bool IntersectsRay(ref SSRay worldSpaceRay, out float distanceAlongRay) { float distanceToSphereOrigin = OpenTKHelper.DistanceToLine( worldSpaceRay, this.center, out distanceAlongRay); return(distanceToSphereOrigin <= this.radius); }
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); }