diff --git a/cs658/final/util/Ray.cc b/cs658/final/util/Ray.cc index 5a6ba72..1d48344 100644 --- a/cs658/final/util/Ray.cc +++ b/cs658/final/util/Ray.cc @@ -9,6 +9,7 @@ Ray::Ray(const Vector & origin, const Vector & direction) { m_origin = origin; m_direction = direction; + m_direction.normalize(); } /* diff --git a/cs658/final/util/Vector.cc b/cs658/final/util/Vector.cc index b81c283..b239769 100644 --- a/cs658/final/util/Vector.cc +++ b/cs658/final/util/Vector.cc @@ -1,6 +1,7 @@ #include "Vector.h" #include +#include Vector::Vector() { @@ -9,6 +10,16 @@ Vector::Vector() m_array[2] = 0.0; } +void Vector::normalize() +{ + double length = sqrt(m_array[0] * m_array[0] + + m_array[1] * m_array[1] + + m_array[2] * m_array[2]); + m_array[0] /= length; + m_array[1] /= length; + m_array[2] /= length; +} + std::ostream & operator<<(std::ostream & out, const Vector & v) { out << "[" << v[0] << ", " << v[1] << ", " << v[2] << "]"; diff --git a/cs658/final/util/Vector.h b/cs658/final/util/Vector.h index a54038d..885df4f 100644 --- a/cs658/final/util/Vector.h +++ b/cs658/final/util/Vector.h @@ -11,6 +11,7 @@ class Vector ~Vector(); double & operator[](int idx) { return m_array[idx]; } double operator[](int idx) const { return m_array[idx]; } + void normalize(); private: double m_array[3];