Vec3d RayTracer::trace(double x, double y) { // Clear out the ray cache in the scene for debugging purposes, if (TraceUI::m_debug) scene->intersectCache.clear(); ray r(Vec3d(0,0,0), Vec3d(0,0,0), ray::VISIBILITY); scene->getCamera().rayThrough(x,y,r); Vec3d ret = traceRay(r, traceUI->getDepth()); ret.clamp(); return ret; }
// Trace a top-level ray through normalized window coordinates (x,y) // through the projection plane, and out into the scene. All we do is // enter the main ray-tracing method, getting things started by plugging // in an initial ray weight of (0.0,0.0,0.0) and an initial recursion depth of 0. Vec3d RayTracer::trace( double x, double y ) { // Clear out the ray cache in the scene for debugging purposes, if (!traceUI->isMultithreading()) scene->intersectCache.clear(); ray r( Vec3d(0,0,0), Vec3d(0,0,0), ray::VISIBILITY ); scene->getCamera().rayThrough( x,y,r ); Vec3d ret = traceRay( r, Vec3d(1.0,1.0,1.0), 0 ); ret.clamp(); return ret; }