X-Git-Url: https://git.rohieb.name/MicroTrace.git/blobdiff_plain/a8137256e983a49f97ff1fbecd26a1a0372f7b0b..881404b4607d24af0d8efea7b041910d796b9474:/Sphere.cxx diff --git a/Sphere.cxx b/Sphere.cxx index fd9ba89..6060361 100644 --- a/Sphere.cxx +++ b/Sphere.cxx @@ -1,7 +1,7 @@ #include "Sphere.hxx" Sphere::Sphere(const Vec3f& center, float radius, Shader* shader) - : Primitive(shader), + : Primitive(shader), m_center(center), m_radius(radius) { @@ -20,22 +20,22 @@ Sphere::Intersect(Ray& ray) if( B*B-4*A*C < 0 ) return false; - + float root = sqrtf(B*B-4*A*C); float t = (-B-root)/(2.0f*A); if(t > ray.t()) return false; - + if( t < Epsilon ) { t = (-B+root)/(2.0f*A); if( t < Epsilon || t > ray.t()) return false; } - + ray.setT(t); ray.setHit(this); - + return true; } @@ -52,7 +52,11 @@ Sphere::GetNormal(Ray& ray) Box Sphere::CalcBounds() { - return Box(); + Vec3f min(m_center[0] - m_radius/2, m_center[1] - m_radius/2, + m_center[2] - m_radius/2); + Vec3f max(m_center[0] + m_radius/2, m_center[1] + m_radius/2, + m_center[2] + m_radius/2); + return Box(min, max); } bool