/* * Renderer.cpp * * Copyright (C) 2009 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this program. If not, see . */ #include "Renderer.h" #include "BSPTree.h" #include "gl.h" namespace Zoom { void Renderer::render(const BSPTree &tree) { vmml::mat4f transform, inverseTransform; glGetFloatv(GL_MODELVIEW_MATRIX, transform.array); transform.inverse(inverseTransform); vmml::vec3f viewPoint = inverseTransform*vmml::vec3f::ZERO; glBegin(GL_TRIANGLES); tree.visit(renderVisitor, viewPoint); glEnd(); } void Renderer::render(const std::list &triangles) { glBegin(GL_TRIANGLES); for(std::list::const_iterator t = triangles.begin(); t != triangles.end(); ++t) { renderTriangle(t->triangle); } glEnd(); } void Renderer::renderTriangle(const Triangle &t) { glColor4fv(t.getColor().array); if(t.getTexture() != lastTexture) { glEnd(); if(t.getTexture()) { glBindTexture(GL_TEXTURE_2D, t.getTexture()); if(!lastTexture) { glEnable(GL_TEXTURE_2D); } } else { glDisable(GL_TEXTURE_2D); } lastTexture = t.getTexture(); glBegin(GL_TRIANGLES); } for(int i = 0; i < 3; ++i) { glTexCoord2fv(t.getTexCoords(i).array); glNormal3fv(t.getNormal(i).array); glVertex3fv(t.getVertex(i).array); } } }