dungeon_crawler
annotate prototype/src/light.h @ 62:f71381c9e245
gamo to xristo
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Tue, 25 Sep 2012 06:59:11 +0300 |
parents | f3030df27110 |
children | d89b403f630b |
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@60 | 40 |
nuclear@23 | 41 bool create_mesh(); |
nuclear@23 | 42 |
nuclear@4 | 43 public: |
nuclear@4 | 44 PointLight(); |
nuclear@4 | 45 PointLight(const Vector3 &pos, const Color &col = 1.0); |
nuclear@4 | 46 |
nuclear@4 | 47 void set_position(const Vector3 &pos); |
nuclear@46 | 48 const Vector3 &get_position() const; |
nuclear@46 | 49 |
nuclear@4 | 50 void set_attenuation(float att_const, float att_lin, float att_quad); |
nuclear@4 | 51 |
nuclear@21 | 52 void set_radius(float rad); |
nuclear@21 | 53 float get_radius() const; |
nuclear@21 | 54 |
nuclear@4 | 55 virtual void use(int id = 0) const; |
nuclear@23 | 56 |
nuclear@23 | 57 virtual void draw() const; |
nuclear@4 | 58 }; |
nuclear@4 | 59 |
nuclear@4 | 60 class DirLight : public Light { |
nuclear@4 | 61 protected: |
nuclear@4 | 62 Vector3 dir; |
nuclear@4 | 63 |
nuclear@23 | 64 bool create_mesh(); |
nuclear@23 | 65 |
nuclear@4 | 66 public: |
nuclear@4 | 67 DirLight(); |
nuclear@4 | 68 DirLight(const Vector3 &dir, const Color &col = 1.0); |
nuclear@4 | 69 |
nuclear@4 | 70 void set_direction(const Vector3 &dir); |
nuclear@46 | 71 const Vector3 &get_direction() const; |
nuclear@4 | 72 |
nuclear@4 | 73 virtual void use(int id = 0) const; |
nuclear@4 | 74 }; |
nuclear@4 | 75 |
nuclear@4 | 76 |
nuclear@4 | 77 void set_light(int id, const Light *lt); |
nuclear@4 | 78 |
nuclear@4 | 79 |
nuclear@4 | 80 #endif // LIGHT_H_ |