nuclear@0: #include "ray.h" nuclear@0: #include "vector.h" nuclear@0: nuclear@0: scalar_t Ray::env_ior = 1.0; nuclear@0: nuclear@0: Ray::Ray() nuclear@0: { nuclear@0: ior = env_ior; nuclear@0: energy = 1.0; nuclear@0: time = 0; nuclear@0: iter = 0; nuclear@0: } nuclear@0: nuclear@0: Ray::Ray(const Vector3 &origin, const Vector3 &dir) nuclear@0: { nuclear@0: this->origin = origin; nuclear@0: this->dir = dir; nuclear@0: ior = env_ior; nuclear@0: energy = 1.0; nuclear@0: time = 0; nuclear@0: iter = 0; nuclear@0: } nuclear@0: nuclear@0: void Ray::transform(const Matrix4x4 &xform) nuclear@0: { nuclear@0: Matrix4x4 upper = xform; nuclear@0: upper[0][3] = upper[1][3] = upper[2][3] = upper[3][0] = upper[3][1] = upper[3][2] = 0.0; nuclear@0: upper[3][3] = 1.0; nuclear@0: nuclear@0: dir.transform(upper); nuclear@0: origin.transform(xform); nuclear@0: } nuclear@0: nuclear@0: Ray Ray::transformed(const Matrix4x4 &xform) const nuclear@0: { nuclear@0: Ray foo = *this; nuclear@0: foo.transform(xform); nuclear@0: return foo; nuclear@0: }