X-Git-Url: https://git.rohieb.name/MicroTrace.git/blobdiff_plain/a8137256e983a49f97ff1fbecd26a1a0372f7b0b..fd7caf7240f13d618697dbbc403142c1dd6057a6:/Triangle.cxx diff --git a/Triangle.cxx b/Triangle.cxx index ed12db0..873f440 100644 --- a/Triangle.cxx +++ b/Triangle.cxx @@ -22,33 +22,33 @@ Triangle::Intersect(Ray& ray) { const Vec3f edge1 = m_b-m_a; const Vec3f edge2 = m_c-m_a; - + const Vec3f pvec = ray.direction().cross(edge2); - + const float det = edge1.dot(pvec); if (fabs(det) < Epsilon) return false; - + const float inv_det = 1.0f / det; - + const Vec3f tvec = ray.origin()-m_a; float lambda = tvec.dot( pvec ); lambda *= inv_det; - - if (lambda < 0.0f || lambda > 1.0f) + + if (lambda < 0.0f || lambda > 1.0f) return false; const Vec3f qvec = tvec.cross(edge1); float mue = ray.direction().dot(qvec); mue *= inv_det; - - if (mue < 0.0f || mue+lambda > 1.0f) + + if (mue < 0.0f || mue+lambda > 1.0f) return false; float f = edge2.dot(qvec); f *= inv_det; - if (ray.t() <= f || f < Epsilon ) + if (ray.t() <= f || f < Epsilon ) return false; - + ray.setT(f); ray.setHit(this); @@ -64,11 +64,15 @@ Triangle::GetNormal(Ray& ray) Box Triangle::CalcBounds() { - return Box(); + Box bounds; + bounds.Extend(m_a); + bounds.Extend(m_b); + bounds.Extend(m_c); + return bounds; } bool Triangle::InVoxel(const Box& box) { - return false; + return CalcBounds().Overlaps(box); }