예제 #1
0
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;
}
예제 #2
0
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;
}