81 lines
2.2 KiB
C++
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;
|
|
};
|
|
}
|