/* * 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" namespace Zoom { const Renderer::RenderVisitor Renderer::renderVisitor = Renderer::RenderVisitor(); 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::renderTriangle(const Triangle &t) { glColor4fv(t.getColor().array); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, t.getColor().array); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (t.getColor()/2).array); glNormal3fv(t.getNormal().array); for(int i = 0; i < 3; ++i) { glVertex3fv(t.getVertex(i).array); } } }