Blob Blame Raw

#include <GL/gl.h>

#include "model.h"


void Model::transform(const Vector3 &scale, const Vector3 &move) {
    for(TriangleList::iterator i = triangles.begin(); i != triangles.end(); ++i) {
        for(int j = 0; j < 3; ++j) {
            i->normal.c[j] *= scale.c[j];
            for(int k = 0; k < 3; ++k) {
                i->vertices[k].c[j] *= scale.c[j];
                i->vertices[k].c[j] += move.c[j];
            }
        }
        Real nl = i->normal.len();
        nl = nl > 1e-5 ? 1/nl : 0.0;
        i->normal = i->normal * nl;
    }
}


void Model::draw() const {
    glEnable(GL_LIGHTING);
    
    glColor4dv(color.c);
    glBegin(GL_TRIANGLES);
    for(TriangleList::const_iterator i = triangles.begin(); i != triangles.end(); ++i) {
        glNormal3dv(i->normal.c);
        glVertex3dv(i->vertices[0].c);
        glVertex3dv(i->vertices[1].c);
        glVertex3dv(i->vertices[2].c);
    }
    glEnd();

    glDisable(GL_LIGHTING);
}