static bool rayObjClosestIntersect( const TRay &ray, const vector<TObject *> &objList, TObject *&obj, float &distance ) { // This routine intersects ray with all of the objects // in the objList and returns the closest intersection // distance and the interesting object, if there is one. distance = INFINITE; for ( vector<TObject *>::const_iterator iter = objList.begin(); iter != objList.end(); iter++ ) { TObject *object = *iter; #ifdef __DEBUG__ object->print("object in node"); #endif TIntersection inter; if ( object->primitive->intersectionRay( ray, inter ) ) { // if ray intersects object #ifdef __DEBUG__ printf("distance: %5.5f\n", inter.distance ); #endif if ( inter.distance < distance ) { // if this object is closest than previous #ifdef __DEBUG__ printf("closer distance: %5.5f distance: %5.5f\n", inter.distance, distance ); #endif distance = inter.distance; // store new distance and this object obj = object; } } #ifdef __DEBUG__ else printf("no intersection with this object\n"); #endif } if ( distance < INFINITE ) { // if ray intersects at least one object #ifdef __DEBUG__ printf("found an intersection\n" ); #endif return true; } #ifdef __DEBUG__ printf("no intersection found in this node\n"); #endif return false; }
static bool rayObjIntersect( const TRay &ray, const vector<TObject *> &objList, const float maxDist2, TObject *&obj ) { // This routine intersects ray with all of the objects // in the objList and returns the first intersected object for ( vector<TObject *>::const_iterator iter = objList.begin(); iter != objList.end(); iter++ ) { TObject *object = *iter; #ifdef __DEBUG__ object->print("object in node"); #endif if ( object->primitive->intersectsRay( ray, maxDist2 ) ) { // if ray intersects object obj = object; // return this object return true; } } return false; }