FDH.h File Reference

#include <esg/Definitions.h>
#include <esg/SceneGraphObject.h>
#include <esg/List.h>
#include <esg/geometry/Geometry.h>

Go to the source code of this file.

Namespaces

namespace  esg

Classes

class  FDH
struct  FDH::FDHCache

Defines

#define FDH_CLIP_LINE_INIT(o, d, i1, i2)
#define FDH_CLIP_LINE_CONT(o, d, i1, i2)
#define FDH_CLIP_LINE_INDEX_INIT(o, d, i1, i2)
#define FDH_CLIP_LINE_INDEX_CONT(o, d, i1, i2)


Define Documentation

#define FDH_CLIP_LINE_CONT o,
d,
i1,
i2   ) 
 

Value:

{ \
   if (d != 0.0) { \
      if (d > 0.0) { \
          t1 = (_values[i2] + o) / -d; \
          if (t1 > maxDist) return; \
          t2 = (_values[i1] - o) /  d;  \
      } else { \
          t1 = (_values[i1] - o) /  d; \
          if (t1 > maxDist) return; \
          t2 = (_values[i2] + o) / -d; \
      } \
      if (t2 < t_out) { /* optimized order of tests taken from POV-ray */ \
          if (t2 < Geometry::EPS) return; \
          if (t1 > t_in) { if (t1 > t2) return; t_in = t1; } \
          else if (t_in > t2) return; \
          t_out = t2; \
      } else if (t1 > t_in) { if (t1 > t_out) return; t_in = t1; } \
  } else  \
      if ((o < -_values[i2]) || (o > _values[i1])) return; \
}
Clip a ray by box - second and farter calls testing t_in and t_out

Input: o = clipping plane normal * ray origin d = clipping plane normal * ray direction i1 = index of upper bound clipping plane i2 = index of lower bound clipping plane

Global variable: Geometry::EPS = zero variation maxDist = longer rays then maxDist are ignored t_in, t_out = poutput = ordered distance of first and second int. _values[] = FDH values (upper bound, -lower bound) t1, t2 = temporary distances

Definition at line 266 of file FDH.h.

Referenced by FDH::rayIntersection().

#define FDH_CLIP_LINE_INDEX_CONT o,
d,
i1,
i2   ) 
 

Value:

{ \
   register int a1, a2; \
   if (d != 0.0) { \
      if (d > 0.0) { \
          t1 = (_values[i2] + o) / -d; \
          if (t1 > maxDist) return; \
          t2 = (_values[i1] - o) /  d; \
          a1 = i2; a2 = i1; \
      } else { \
          t1 = (_values[i1] - o) /  d; \
          if (t1 > maxDist) return; \
          t2 = (_values[i2] + o) / -d; \
          a1 = i1; a2 = i2; \
      } \
      if (t2 < t_out) { /* optimized order of tests taken from POV-ray */ \
          if (t2 < Geometry::EPS) return; \
          if (t1 > t_in) { if (t1 > t2) return; t_in = t1; } \
          else if (t_in > t2) return; \
          t_out = t2; plane2 = a2; \
      } else \
          if (t1 > t_in) { if (t1 > t_out) return; t_in = t1; plane1 = a1; }\
  } else  \
      if ((o < -_values[i2]) || (o > _values[i1])) return; \
}
Clip a ray by box - second and farter calls testing t_in and t_out In addition this macro sets an indices of successful clipping planes

Input: o = clipping plane normal * ray origin d = clipping plane normal * ray direction i1 = index of upper bound clipping plane i2 = index of lower bound clipping plane

Global variable: Geometry::EPS = zero variation maxDist = longer rays then maxDist are ignored t_in, t_out = poutput = ordered distance of first and second int. _values[] = FDH values (upper bound, -lower bound) plane1, plane2 = indices of successful clipping planes

Definition at line 347 of file FDH.h.

Referenced by FDH::rayIntersection().

#define FDH_CLIP_LINE_INDEX_INIT o,
d,
i1,
i2   ) 
 

Value:

{ \
   if (d != 0.0) { \
      if (d > 0.0) { \
          t_out = (_values[i1] - o) /  d; \
          if (t_out < Geometry::EPS) return; \
          t_in  = (_values[i2] + o) / -d; \
          if (t_in > maxDist)       return; \
          plane1 = i2; plane2 = i1; \
      } else { \
          t_in  = (_values[i1] - o) /  d; \
          if (t_in > maxDist)       return; \
          t_out = (_values[i2] + o) / -d; \
          if (t_out < Geometry::EPS) return; \
          plane1 = i1; plane2 = i2; \
      } \
  } else { \
      if ((o < -_values[i2]) || (o > _values[i1])) return; \
      t_in  = -MAXFLOAT+1; \
      t_out =  MAXFLOAT; \
  } \
}
Clip a ray by box - first call initializing t_in and t_out In addition this macro sets an indices of successful clipping planes

Input: o = clipping plane normal * ray origin d = clipping plane normal * ray direction i1 = index of upper bound clipping plane i2 = index of lower bound clipping plane

Global variable: Geometry::EPS = zero variation maxDist = longer rays then maxDist are ignored t_in, t_out = poutput = ordered distance of first and second int. _values[] = FDH values (upper bound, -lower bound) plane1, plane2 = indices of successful clipping planes

Definition at line 306 of file FDH.h.

Referenced by FDH::rayIntersection().

#define FDH_CLIP_LINE_INIT o,
d,
i1,
i2   ) 
 

Value:

{ \
   if (d != 0.0) { \
      if (d > 0.0) { \
          t_out = (_values[i1] - o) /  d; \
          if (t_out < Geometry::EPS) return; \
          t_in  = (_values[i2] + o) / -d; \
          if (t_in > maxDist)       return; \
      } else { \
          t_in  = (_values[i1] - o) /  d; \
          if (t_in > maxDist)       return; \
          t_out = (_values[i2] + o) / -d; \
          if (t_out < Geometry::EPS) return; \
      } \
  } else { \
      if ((o < -_values[i2]) || (o > _values[i1])) return; \
      t_in  =  -MAXFLOAT+1; \
      t_out =   MAXFLOAT; \
  } \
}
Clip a ray by box - first call initializing t_in and t_out

Input: o = clipping plane normal * ray origin d = clipping plane normal * ray direction i1 = index of upper bound clipping plane i2 = index of lower bound clipping plane

Global variable: Geometry::EPS = zero variation maxDist = longer rays then maxDist are ignored t_in, t_out = poutput = ordered distance of first and second int. _values[] = FDH values (upper bound, -lower bound)

Definition at line 228 of file FDH.h.

Referenced by FDH::rayIntersection().


Generated on Wed Jun 28 12:24:32 2006 for esg by  doxygen 1.4.6