From 4f6b27b58bfae9ce860a005edf890d8f1136a85f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 5 Mar 2008 18:21:39 +0000 Subject: OpenGL lighting --- src/render/face.cc | 1 + src/render/gl.cc | 14 ++++++++++---- src/render/gl.h | 11 +++++++---- src/render/model.cc | 17 +++++++---------- 4 files changed, 25 insertions(+), 18 deletions(-) (limited to 'src/render') diff --git a/src/render/face.cc b/src/render/face.cc index 764c452..31b7fcc 100644 --- a/src/render/face.cc +++ b/src/render/face.cc @@ -43,6 +43,7 @@ void Face::draw() { //gl::begin(gl::LineLoop); gl::begin(gl::Polygon); + gl::normal(face_normal); // face_normal already has unit lenght for (std::vector::iterator it = face_vertex.begin(); it != face_vertex.end(); it++) { gl::vertex(*(*it)); } diff --git a/src/render/gl.cc b/src/render/gl.cc index 6eb91b1..682bfc8 100644 --- a/src/render/gl.cc +++ b/src/render/gl.cc @@ -4,12 +4,10 @@ the terms of the GNU General Public License version 2 */ -// project includes -#include "render/gl.h" - -// system includes #include "GL/gl.h" +#include "render/gl.h" + using math::Vector3f; using math::Color; @@ -130,6 +128,14 @@ void vertex(const float x, const float y, const float z) { glVertex3f(x, y, z); } +void normal(const Vector3f & vector) { + glNormal3fv(vector.coord); +} + +void normal(const float x, const float y, const float z) { + glNormal3f(x, y, z); +} + void push() { glPushMatrix(); } diff --git a/src/render/gl.h b/src/render/gl.h index 0513410..d5d6418 100644 --- a/src/render/gl.h +++ b/src/render/gl.h @@ -7,13 +7,11 @@ #ifndef __INCLUDED_RENDER_GL_H__ #define __INCLUDED_RENDER_GL_H__ -// project headers +#include + #include "math/vector3f.h" #include "math/color.h" -// OpenGL headers -#include - namespace render { /// wrapper namespace for OpenGL operations @@ -99,6 +97,11 @@ namespace gl void vertex(const math::Vector3f& vector); void vertex(const float x, const float y, const float z); + + /// glNormal + void normal(const math::Vector3f & vector); + + void normal(const float x, const float y, const float z); /// multiply the current matrix by a general rotation matrix /** @param angle The angle of the rotation, in degrees [0-360] diff --git a/src/render/model.cc b/src/render/model.cc index 70b5f18..848bc49 100644 --- a/src/render/model.cc +++ b/src/render/model.cc @@ -414,9 +414,7 @@ void Model::make_face(math::Plane3f *face, std::vector & planes color = 0; } - Vector3f n = face->normal(); - n.normalize(); - Face *mf = new Face(n, color); + Face *mf = new Face(face->normal()*-1, color); if (color) delete color; for (std::vector::iterator it = vl.begin(); it != vl.end(); it++) { @@ -459,16 +457,16 @@ void Model::draw(core::Entity const * entity, math::Vector3f const & eye) for (std::list::iterator fit = model_face.begin(); fit != model_face.end(); fit++) { // poor man's lighting // set the face color depending on the viewing direction - float d = fabsf(math::dotproduct(n, (*fit)->normal())); + //float d = fabsf(math::dotproduct(n, (*fit)->normal())); - if (d > 1) - d = 1; - d = 0.5f + d/2; + //if (d > 1) + // d = 1; + //d = 0.5f + d/2; if ((*fit)->color()) { - render::gl::color(*(*fit)->color() * d); + render::gl::color(*(*fit)->color()); } else { - render::gl::color(entity->color() * d); + render::gl::color(entity->color()); } (*fit)->draw(); } @@ -482,7 +480,6 @@ void Model::draw(core::EntityControlable const * entity, math::Vector3f const & // draw engines // all engines are assumed to point to the rear if (model_engine.size() && entity->thrust()) { - gl::color(1.0f,0 ,0); gl::begin(gl::Lines); -- cgit v1.2.3