]> git.tdb.fi Git - libs/gl.git/commitdiff
Add Lights
authorMikko Rasa <tdb@tdb.fi>
Wed, 17 Oct 2007 13:53:28 +0000 (13:53 +0000)
committerMikko Rasa <tdb@tdb.fi>
Wed, 17 Oct 2007 13:53:28 +0000 (13:53 +0000)
source/light.cpp [new file with mode: 0644]
source/light.h [new file with mode: 0644]

diff --git a/source/light.cpp b/source/light.cpp
new file mode 100644 (file)
index 0000000..1570c5c
--- /dev/null
@@ -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 (file)
index 0000000..cbf95ad
--- /dev/null
@@ -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