From 577cd77e2be089a1bf2284e33e9b07fc36a4320b Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 24 Dec 2009 12:14:51 +0100 Subject: Some optimizations --- src/Renderer.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/Renderer.cpp') diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 8aaf9c5..b02c5ff 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -23,6 +23,7 @@ namespace Zoom { Renderer::Renderer() : activeTexture(0), renderVisitor(this) { + nullShader = boost::shared_ptr(Shader::load("null.vert", "null.frag")); ambientShader = boost::shared_ptr(Shader::load("ambient.vert", "ambient.frag")); lightShader = boost::shared_ptr(Shader::load("light.vert", "light.frag")); } @@ -57,6 +58,33 @@ void Renderer::renderTriangle(const Triangle &t) { } } +void Renderer::renderShadowVolume(const ShadowVolume &v) { + if(!v.isVisible()) + return; + + glVertex3fv(v.getVertex(2).array); + glVertex3fv(v.getVertex(1).array); + glVertex3fv(v.getVertex(0).array); + + for(int i = 0; i < 3; ++i) { + const vmml::vec3f &p1 = v.getVertex(i), &p2 = v.getVertex((i+1)%3); + const vmml::vec4f &dir1 = vmml::vec4f(v.getDirection(i), 0); + const vmml::vec4f &dir2 = vmml::vec4f(v.getDirection((i+1)%3), 0); + + glVertex3fv(p1.array); + glVertex3fv(p2.array); + glVertex4fv(dir1.array); + + glVertex4fv(dir1.array); + glVertex3fv(p2.array); + glVertex4fv(dir2.array); + } + + glVertex4fv(vmml::vec4f(v.getDirection(0), 0).array); + glVertex4fv(vmml::vec4f(v.getDirection(1), 0).array); + glVertex4fv(vmml::vec4f(v.getDirection(2), 0).array); +} + void Renderer::useTexture(unsigned texture) { if(texture) { glBindTexture(GL_TEXTURE_2D, texture); -- cgit v1.2.3