#include "Scene.hxx"
#include "PerspectiveCamera.hxx"
-#include <limits>
Scene::Scene()
- : m_camera(new PerspectiveCamera(Vec3f(0,0,8),
- Vec3f(0,0,-1),
- Vec3f(0,1,0),
- 50,
- 640,
+ : m_camera(new PerspectiveCamera(Vec3f(0,0,8),
+ Vec3f(0,0,-1),
+ Vec3f(0,1,0),
+ 50,
+ 640,
480)
),
m_bgColor(Vec3f(0,0,0))
return *this;
}
-void
+void
Scene::Add(Primitive* p)
{
m_primitives.push_back(p);
}
+void
+Scene::Add(Light* l)
+{
+}
bool
Scene::Intersect(Ray& ray)
{
- bool hit = false;
- float t = std::numeric_limits<float>::max();
- for (std::vector<Primitive*>::iterator i = m_primitives.begin();
- i != m_primitives.end(); i++) {
- // store closest object hit
- if (hit |= (*i)->Intersect(ray)) {
- if (ray.t() < t) {
- ray.setHit(*i);
- t = ray.t();
- }
+ bool intersect = false;
+
+ for(unsigned int i = 0; i < m_primitives.size(); ++i)
+ {
+ intersect |= m_primitives[i]->Intersect(ray);
}
- }
- return hit;
+
+ return intersect;
}
bool
Vec3f
Scene::RayTrace(Ray& ray)
{
- if (Intersect(ray)) {
- return ray.hit()->shader()->Shade(ray);
- } else {
- return Vec3f(0,0,0);
- }
+ bool intersect = this->Intersect(ray);
+ return (intersect) ? ray.hit()->shader()->Shade(ray) : m_bgColor;
}
-const Camera*
+const Camera*
Scene::camera() const
{
return m_camera;