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__
|