voxspatium/src/Environment.h

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__