From 832fb1872e6e5e664e2e5130122fd2f74729ed42 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Wed, 17 Oct 2007 13:53:28 +0000 Subject: [PATCH] Add Lights --- source/light.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ source/light.h | 45 ++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 source/light.cpp create mode 100644 source/light.h diff --git a/source/light.cpp b/source/light.cpp new file mode 100644 index 00000000..1570c5cd --- /dev/null +++ b/source/light.cpp @@ -0,0 +1,63 @@ +/* $Id$ + +This file is part of libmspgl +Copyright © 2007 Mikko Rasa, Mikkosoft Productions +Distributed under the LGPL +*/ + +#include "light.h" + +namespace Msp { +namespace GL { + +Light::Light(): + ambient(0), + diffuse(1), + specular(1), + x(0), y(0), z(1), w(0), + sdx(0), sdy(0), sdz(-1), + spot_exp(0), + spot_cutoff(180) +{ } + +void Light::set_ambient(const Color &c) +{ + ambient=c; +} + +void Light::set_diffuse(const Color &c) +{ + diffuse=c; +} + +void Light::set_specular(const Color &c) +{ + specular=c; +} + +void Light::set_position(float x_, float y_, float z_, float w_) +{ + x=x_; + y=y_; + z=z_; + w=w_; +} + +void Light::apply() +{ + apply_to(current); +} + +void Light::apply_to(unsigned l) +{ + l+=GL_LIGHT0; + glLightfv(l, GL_AMBIENT, &ambient.r); + glLightfv(l, GL_DIFFUSE, &diffuse.r); + glLightfv(l, GL_SPECULAR, &specular.r); + glLightfv(l, GL_POSITION, &x); +} + +unsigned Light::current=0; + +} // namespace GL +} // namespace Msp diff --git a/source/light.h b/source/light.h new file mode 100644 index 00000000..cbf95add --- /dev/null +++ b/source/light.h @@ -0,0 +1,45 @@ +/* $Id$ + +This file is part of libmspgl +Copyright © 2007 Mikko Rasa, Mikkosoft Productions +Distributed under the LGPL +*/ + +#ifndef MSP_GL_LIGHT_H_ +#define MSP_GL_LIGHT_H_ + +#include "color.h" + +namespace Msp { +namespace GL { + +class Light +{ +private: + Color ambient; + Color diffuse; + Color specular; + float x, y, z, w; + float sdx, sdy, sdz; + float spot_exp; + float spot_cutoff; + float attenuation[3]; + + static unsigned current; + +public: + Light(); + void set_ambient(const Color &c); + void set_diffuse(const Color &c); + void set_specular(const Color &c); + void set_position(float, float, float, float); + void apply(); + void apply_to(unsigned); + + static void activate(unsigned); +}; + +} // namespace GL +} // namespace Msp + +#endif -- 2.45.2