dungeon_crawler

annotate prototype/src/light.h @ 77:d89b403f630b

added gamma correction (without dialing the lighting down yet) fixed the incorrect PointLight sphere radius
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 26 Oct 2012 03:03:52 +0300
parents aa86119e3295
children
rev   line source
nuclear@4 1 #ifndef LIGHT_H_
nuclear@4 2 #define LIGHT_H_
nuclear@4 3
nuclear@4 4 #include "color.h"
nuclear@4 5
nuclear@4 6 class Light {
nuclear@4 7 protected:
nuclear@4 8 float intensity;
nuclear@4 9 Color color;
nuclear@4 10
nuclear@38 11 float flicker_offset;
nuclear@38 12
nuclear@23 13 // VBO for rendering the light source
nuclear@23 14 unsigned int vbo;
nuclear@23 15 unsigned int num_faces;
nuclear@23 16
nuclear@23 17 virtual bool create_mesh();
nuclear@23 18
nuclear@4 19 public:
nuclear@4 20 Light(const Color &col = 1.0);
nuclear@4 21 virtual ~Light();
nuclear@4 22
nuclear@4 23 virtual void set_intensity(float val);
nuclear@4 24 virtual void set_color(const Color &col);
nuclear@4 25
nuclear@21 26 virtual Color get_color(bool with_intensity = true) const;
nuclear@21 27
nuclear@4 28 virtual void use(int id = 0) const;
nuclear@23 29
nuclear@23 30 virtual void draw() const;
nuclear@4 31 };
nuclear@4 32
nuclear@4 33 class PointLight : public Light {
nuclear@4 34 protected:
nuclear@4 35 Vector3 pos;
nuclear@4 36 float atten[3];
nuclear@21 37 float radius;
nuclear@4 38
nuclear@60 39 static unsigned int sph_vbo;
nuclear@77 40 static int subdiv;
nuclear@60 41
nuclear@23 42 bool create_mesh();
nuclear@23 43
nuclear@4 44 public:
nuclear@4 45 PointLight();
nuclear@4 46 PointLight(const Vector3 &pos, const Color &col = 1.0);
nuclear@4 47
nuclear@4 48 void set_position(const Vector3 &pos);
nuclear@46 49 const Vector3 &get_position() const;
nuclear@46 50
nuclear@4 51 void set_attenuation(float att_const, float att_lin, float att_quad);
nuclear@4 52
nuclear@21 53 void set_radius(float rad);
nuclear@21 54 float get_radius() const;
nuclear@21 55
nuclear@4 56 virtual void use(int id = 0) const;
nuclear@23 57
nuclear@23 58 virtual void draw() const;
nuclear@4 59 };
nuclear@4 60
nuclear@4 61 class DirLight : public Light {
nuclear@4 62 protected:
nuclear@4 63 Vector3 dir;
nuclear@4 64
nuclear@23 65 bool create_mesh();
nuclear@23 66
nuclear@4 67 public:
nuclear@4 68 DirLight();
nuclear@4 69 DirLight(const Vector3 &dir, const Color &col = 1.0);
nuclear@4 70
nuclear@4 71 void set_direction(const Vector3 &dir);
nuclear@46 72 const Vector3 &get_direction() const;
nuclear@4 73
nuclear@4 74 virtual void use(int id = 0) const;
nuclear@4 75 };
nuclear@4 76
nuclear@4 77
nuclear@4 78 void set_light(int id, const Light *lt);
nuclear@4 79
nuclear@4 80
nuclear@4 81 #endif // LIGHT_H_