//---------------------------------------------------------------------------- // William Baxter III's Ray Tracer // // Project for Comp 238, Raster Graphics // University of North Carolina at Chapel Hill // // $Id:$ //---------------------------------------------------------------------------- #ifndef WB3SCENE_H #define WB3SCENE_H #include #include "wb3TArray.h" #include "wb3ArtifactSet.hpp" class wb3Light; typedef wb3TArray wb3LightArray; // A scene is just an artifact container with // (1) a background color // and (2) a list of lights class wb3Scene : public wb3ArtifactSet { public: wb3Scene(float BGColor[3] = 0); ~wb3Scene() {}; void SetBackground(const Vec3f& color); const Vec3f& GetBackground() const; void SetCamera(Camera *cam); Camera *GetCamera() const; void AddLight(wb3Light *pLight); const wb3LightArray& GetLights() const; virtual void Shade(const wb3Scene* scene, const wb3Artifact* from, const wb3Artifact* hit, const Ray3f& r, const Vec3f &isect, Vec3f& color, Vec3f& attenuation, int hits) const; protected: Vec3f m_BGColor; wb3Artifact *m_pArtifact; Camera *m_pCam; wb3LightArray m_Lights; static wb3Material m_DummyMaterial; }; //---------------------------------------------------------------------------- inline void wb3Scene::SetBackground(const Vec3f& color) { m_BGColor = color; } //---------------------------------------------------------------------------- inline const Vec3f& wb3Scene::GetBackground() const { return m_BGColor; } //---------------------------------------------------------------------------- inline void wb3Scene::SetCamera(Camera *pCam) { if (m_pCam) delete m_pCam; m_pCam = pCam; } //---------------------------------------------------------------------------- inline Camera* wb3Scene::GetCamera() const { return m_pCam; } //---------------------------------------------------------------------------- inline void wb3Scene::AddLight(wb3Light *pLight) { m_Lights.Add(pLight); } //---------------------------------------------------------------------------- inline const wb3LightArray& wb3Scene::GetLights() const { return m_Lights; } //---------------------------------------------------------------------------- #endif