From 2a6009e8f24be3909239a5ab6e6d6fb53d0c5845 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 24 Dec 2009 03:24:53 +0100 Subject: Working shadow volumes! :-D --- src/Game.cpp | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) (limited to 'src/Game.cpp') diff --git a/src/Game.cpp b/src/Game.cpp index 1b23222..d265e83 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -55,6 +55,8 @@ Game::Game() : playerPos(vmml::vec3f::ZERO), playerRotY(vmml::mat4f::IDENTITY), glEnable(GL_CULL_FACE); glFrontFace(GL_CCW); + glEnable(GL_STENCIL_TEST); + loadLevel("level.xml"); triangles.insert(triangles.end(), level->getRooms().front().walls.begin(), level->getRooms().front().walls.end()); std::sort(triangles.begin(), triangles.end(), Renderer::TextureSorter()); @@ -137,7 +139,7 @@ void Game::render() { light.z() = -8.0; } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); vmml::mat4f transform(playerRotY), inverse; transform.rotate_x(playerRotX); @@ -147,36 +149,6 @@ void Game::render() { glLoadMatrixf(inverse.array); renderer.render(triangles, light); - - Shader::disable(); - glDepthMask(GL_FALSE); - glBlendFunc(GL_ONE, GL_ONE); - glBlendEquation(GL_FUNC_ADD); - glDepthFunc(GL_GREATER); - glColor3f(0.05, 0.05, 0.05); - glFrontFace(GL_CCW); - - glBegin(GL_TRIANGLES); - for(std::vector::iterator t = triangles.begin(); t != triangles.end(); ++t) { - ShadowVolume v(t->triangle, light); - v.render(); - } - glEnd(); - - glFrontFace(GL_CW); - glBlendEquation(GL_FUNC_REVERSE_SUBTRACT); - - glBegin(GL_TRIANGLES); - for(std::vector::iterator t = triangles.begin(); t != triangles.end(); ++t) { - ShadowVolume v(t->triangle, light); - v.render(); - } - glEnd(); - - glFrontFace(GL_CCW); - glDepthMask(GL_TRUE); - glDepthFunc(GL_LEQUAL); - glBlendEquation(GL_FUNC_ADD); } } -- cgit v1.2.3