src/rcrt/Ray.cpp

Go to the documentation of this file.
00001 #include "Ray.h"
00002 #include <limits>
00003 
00004 using namespace std;
00005 
00006 namespace rcrt
00007 {
00008 
00009 
00010 Ray::Ray(const Point3D& o, const Vec3D& dir, int d, float w, bool cull):origin(o),direction(dir.normalized()),
00011 invdir(1/dir.x(),1/dir.y(),1/dir.z()),
00012 minDistance(numeric_limits<float>::epsilon()),
00013 maxDistance(numeric_limits<float>::infinity()),
00014 currDistance(numeric_limits<float>::infinity()),
00015 depth(d),cullBackFaces(cull), lastIOR(1,0)//travelling through vacuum by default
00016 ,lastObject(0),weight(w),tris(0),bihnodes(0)
00017 {
00018         dirsign[0] = (direction.x() < 0) ? 1 : 0;
00019         dirsign[1] = (direction.y() < 0) ? 1 : 0;
00020         dirsign[2] = (direction.z() < 0) ? 1 : 0;
00021         
00022         tris = 0;
00023 }
00024 
00025 
00026 Ray::~Ray()
00027 {
00028 }
00029 
00030 
00031 const Point3D& Ray::org() const
00032 {
00033         return origin;
00034 }
00035 
00036 
00037 const Vec3D& Ray::dir() const
00038 {
00039         return direction;
00040 }
00041 
00042 const Vec3D& Ray::invDir() const
00043 {
00044         return invdir;
00045 }
00046 
00047 const int* Ray::dirSign() const
00048 {
00049         return dirsign;
00050 }
00051 
00052 void Ray::setMinDist(float minD)
00053 {
00054         minDistance = minD;
00055 }
00056 
00057 
00058 void Ray::setMaxDist(float maxD)
00059 {
00060         maxDistance = maxD;
00061 }
00062 
00063 
00064 void Ray::setCurrDist(float currD)
00065 {
00066         currDistance = currD;
00067 }
00068 
00069 void Ray::setDepth(int d)
00070 {
00071         depth = d;
00072 }
00073 
00074 
00075 float Ray::minDist() const
00076 {
00077         return minDistance;
00078 }
00079 
00080 
00081 float Ray::maxDist() const
00082 {
00083         return maxDistance;
00084 }
00085 
00086 
00087 float Ray::currDist() const
00088 {
00089         return currDistance;
00090 }
00091 
00092 int Ray::getDepth() const
00093 {
00094         return depth;
00095 }
00096 
00097 Point3D Ray::atDistance(float d) const
00098 {
00099         return origin + direction * d;
00100 }
00101 
00102 const bool& Ray::cull() const
00103 {
00104         return cullBackFaces;
00105 }
00106 
00107 void Ray::setLastIOR(const std::complex<float> ior)
00108 {
00109         lastIOR = ior;
00110 }
00111 
00112 const complex<float>& Ray::getLastIOR() const
00113 {
00114         return lastIOR;
00115 }
00116 
00117 void Ray::setLastObject(Object* obj)
00118 {
00119         lastObject = obj;
00120 }
00121 
00122 Object* Ray::getLastObject()
00123 {
00124         return lastObject;
00125 }
00126 
00127 const float& Ray::getWeight() const
00128 {
00129         return weight;
00130 }
00131 
00132 }

Generated on Thu Jan 31 19:26:19 2008 for RenderingCompetitionRayTracer by  doxygen 1.5.3