#pragma once #include using namespace glm; struct Primitive { private: vec3 m_ambientColor; vec3 m_diffuseColor; vec3 m_specularColor; vec3 m_position; public: vec3& ambientColor() { return m_ambientColor; } const vec3& ambientColor() const { return m_ambientColor; } vec3& diffuseColor() { return m_diffuseColor; } const vec3& diffuseColor() const { return m_diffuseColor; } vec3& specularColor() { return m_specularColor; } const vec3& specularColor() const { return m_specularColor; } vec3& position() { return m_position; } const vec3& position() const { return m_position; } }; struct Sphere : Primitive { private: float m_radius; public: float& radius() { return m_radius; } const float& radius() const { return m_radius; } }; struct Torus : Primitive { private: float m_outerRadius; float m_innerRadius; public: float& outerRadius() { return m_outerRadius; } const float& outerRadius() const { return m_outerRadius; } float& innerRadius() { return m_innerRadius; } const float& innerRadius() const { return m_innerRadius; } }; struct Cube : Primitive { private: float m_size; public: float& size() { return m_size; } const float& size() const { return m_size; } }; struct RoundedCube : Primitive { private: float m_size; float m_radius; public: float& size() { return m_size; } const float& size() const { return m_size; } float& radius() { return m_radius; } const float& radius() const { return m_radius; } }; struct Cylinder : Primitive { private: float m_height; float m_radius; public: float& height() { return m_height; } const float& height() const { return m_height; } float& radius() { return m_radius; } const float& radius() const { return m_radius; } }; struct Cone : Primitive { private: float m_height; float m_radius; public: float& height() { return m_height; } const float& height() const { return m_height; } float& radius() { return m_radius; } const float& radius() const { return m_radius; } };