54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
#ifndef __ENVIRONMENT_H__
|
|
#define __ENVIRONMENT_H__
|
|
|
|
#include "util/Common.h"
|
|
#include "util/Singleton.h"
|
|
#include "Shader.h"
|
|
|
|
#define MAX_LIGHTS 4
|
|
|
|
struct Light {
|
|
Light (glm::vec3 position, glm::vec3 color, glm::vec3 attenuation = glm::vec3(1.0, 0.0, 0.0)) :
|
|
position(position), color(color), attenuation(attenuation) {}
|
|
glm::vec3 position;
|
|
glm::vec3 color;
|
|
glm::vec3 attenuation;
|
|
};
|
|
|
|
struct SpotLight : public Light {
|
|
SpotLight (glm::vec3 position, glm::vec3 dir, glm::vec3 color, glm::vec3 attenuation) :
|
|
Light(position, color, attenuation), direction(dir) {}
|
|
glm::vec3 direction;
|
|
};
|
|
|
|
struct DirectionalLight : public SpotLight {
|
|
DirectionalLight (glm::vec3 position, glm::vec3 dir, glm::vec3 color) :
|
|
SpotLight(position, dir, color, glm::vec3(1.0, 0.0, 0.0)) {}
|
|
};
|
|
|
|
class Environment : public Singleton<Environment>
|
|
{
|
|
public:
|
|
void draw (Shader* shader);
|
|
|
|
inline void setAmbientColor (glm::vec3 color) { m_ambient = color; }
|
|
inline void setSun (Light light) { m_sun = light; }
|
|
|
|
friend class Singleton<Environment>;
|
|
private:
|
|
Light m_sun;
|
|
|
|
// Ambient color
|
|
glm::vec3 m_ambient;
|
|
|
|
// Fog
|
|
glm::vec3 m_fogColor;
|
|
float m_fogStart;
|
|
float m_fogEnd;
|
|
|
|
// All lights
|
|
std::vector<Light> m_lights;
|
|
};
|
|
|
|
#endif // __ENVIRONMENT_H__
|