diff options
Diffstat (limited to 'Triangle.h')
-rw-r--r-- | Triangle.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Triangle.h b/Triangle.h new file mode 100644 index 0000000..5e8a12c --- /dev/null +++ b/Triangle.h @@ -0,0 +1,59 @@ +#ifndef _TRIANGLE_H_ +#define _TRIANGLE_H_ + +#include "gl.h" +#include <vmmlib/vector.hpp> +#include <vmmlib/matrix.hpp> + +class Triangle +{ + public: + Triangle() : c(vmml::vec4f::ONE) { + v[0] = v[1] = v[2] = vmml::vec3f::ZERO; + } + + Triangle(const vmml::vec3f &v1, const vmml::vec3f &v2, const vmml::vec3f &v3, const vmml::vec4f &c0) : c(c0) + { + v[0] = v1; + v[1] = v2; + v[2] = v3; + } + + const vmml::vec3f& getVertex(int i) const {return v[i];} + const vmml::vec4f& getColor() const {return c;} + + vmml::vec3f getNormal() const { + return v[0].compute_normal(v[1], v[2]); + } + + void render() const { + glColor4fv(c.array); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, c.array); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (c/2).array); + + glNormal3fv(getNormal().array); + + for(int i = 0; i < 3; ++i) + { + glVertex3fv(v[i].array); + } + } + + void transform(const vmml::mat4f &m) { + for(int i = 0; i < 3; ++i) + { + v[i] = m*v[i]; + } + } + + vmml::vec3f getCenter() const { + return (v[0]+v[1]+v[2])/3; + } + + private: + vmml::vec3f v[3]; + vmml::vec4f c; +}; + +#endif /*_TRIANGLE_H_*/ + |