Files
GP1-Raytracer/project/src/Scene.h
2024-09-25 11:50:34 +02:00

81 lines
2.2 KiB
C++

#pragma once
#include <string>
#include <vector>
#include "Maths.h"
#include "DataTypes.h"
#include "Camera.h"
namespace dae
{
//Forward Declarations
class Timer;
class Material;
struct Plane;
struct Sphere;
struct Light;
//Scene Base Class
class Scene
{
public:
Scene();
virtual ~Scene();
Scene(const Scene&) = delete;
Scene(Scene&&) noexcept = delete;
Scene& operator=(const Scene&) = delete;
Scene& operator=(Scene&&) noexcept = delete;
virtual void Initialize() = 0;
virtual void Update(dae::Timer* pTimer)
{
m_Camera.Update(pTimer);
}
Camera& GetCamera() { return m_Camera; }
void GetClosestHit(const Ray& ray, HitRecord& closestHit) const;
bool DoesHit(const Ray& ray) const;
const std::vector<Plane>& GetPlaneGeometries() const { return m_PlaneGeometries; }
const std::vector<Sphere>& GetSphereGeometries() const { return m_SphereGeometries; }
const std::vector<Light>& GetLights() const { return m_Lights; }
const std::vector<Material*> GetMaterials() const { return m_Materials; }
protected:
std::string sceneName;
std::vector<Plane> m_PlaneGeometries{};
std::vector<Sphere> m_SphereGeometries{};
std::vector<TriangleMesh> m_TriangleMeshGeometries{};
std::vector<Light> m_Lights{};
std::vector<Material*> m_Materials{};
Camera m_Camera{};
Sphere* AddSphere(const Vector3& origin, float radius, unsigned char materialIndex = 0);
Plane* AddPlane(const Vector3& origin, const Vector3& normal, unsigned char materialIndex = 0);
TriangleMesh* AddTriangleMesh(TriangleCullMode cullMode, unsigned char materialIndex = 0);
Light* AddPointLight(const Vector3& origin, float intensity, const ColorRGB& color);
Light* AddDirectionalLight(const Vector3& direction, float intensity, const ColorRGB& color);
unsigned char AddMaterial(Material* pMaterial);
};
//+++++++++++++++++++++++++++++++++++++++++
//WEEK 1 Test Scene
class Scene_W1 final : public Scene
{
public:
Scene_W1() = default;
~Scene_W1() override = default;
Scene_W1(const Scene_W1&) = delete;
Scene_W1(Scene_W1&&) noexcept = delete;
Scene_W1& operator=(const Scene_W1&) = delete;
Scene_W1& operator=(Scene_W1&&) noexcept = delete;
void Initialize() override;
};
}