X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FSkybox.cpp;h=8fcc9671e5fbb9b8466e7eb9b93723982239a204;hb=bdabd9d4a53be2fa9d90f900f7e5949d2f0ef75c;hp=5c4aaab1fb10a8748d2edf769d82cf30560d262f;hpb=6d9ead11533a1cdd9a892ad989609f9755f23120;p=lugaru.git diff --git a/Source/Skybox.cpp b/Source/Skybox.cpp index 5c4aaab..8fcc967 100644 --- a/Source/Skybox.cpp +++ b/Source/Skybox.cpp @@ -1,22 +1,21 @@ /* Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. -Lugaru is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. -This program is distributed in the hope that it will be useful, +Lugaru 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 General Public License for more details. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +along with Lugaru. If not, see . */ #include "Skybox.h" @@ -30,115 +29,142 @@ extern float skyboxr; extern float skyboxg; extern float skyboxb; -void -SkyBox::load (const char *ffront, const char *fleft, const char *fback, - const char *fright, const char *fup, const char *fdown) +void SkyBox::load (const std::string& ffront, const std::string& fleft, const std::string& fback, + const std::string& fright, const std::string& fup, const std::string& fdown) { - Game::LoadTexture(ffront, &front, true, false); - Game::LoadTexture(fleft, &left, true, false); - Game::LoadTexture(fback, &back, true, false); - Game::LoadTexture(fright, &right, true, false); - Game::LoadTexture(fup, &up, true, false); - Game::LoadTexture(fdown, &down, true, false); + front.load(ffront, true); + left.load(fleft, true); + back.load(fback, true); + right.load(fright, true); + up.load(fup, true); + down.load(fdown, true); } -void SkyBox::draw() +void SkyBox::draw() { - static float size=viewdistance/4; - glPushMatrix(); - static GLfloat M[16]; - glGetFloatv(GL_MODELVIEW_MATRIX,M); - M[12]=0; - M[13]=0; - M[14]=0; - glLoadMatrixf(M); - if(environment==2)glScalef(1+blurness/1000,1,1+blurness/1000); - if(environment!=2)glColor3f(.85*skyboxr,.85*skyboxg,.95*skyboxb); - else glColor3f(1*skyboxr,.95*skyboxg,.95*skyboxb); + static float size = viewdistance / 4; + glPushMatrix(); + static GLfloat M[16]; + glGetFloatv(GL_MODELVIEW_MATRIX, M); + M[12] = 0; + M[13] = 0; + M[14] = 0; + glLoadMatrixf(M); + if (environment == desertenvironment) { + glScalef(1 + blurness / 1000, 1, 1 + blurness / 1000); + glColor3f(1 * skyboxr, .95 * skyboxg, .95 * skyboxb); + } else { + glColor3f(.85 * skyboxr, .85 * skyboxg, .95 * skyboxb); + } - if(!skyboxtexture){ - glDisable(GL_TEXTURE_2D); - glColor3f(skyboxr*.8,skyboxg*.8,skyboxb*.8); - } - glDepthMask(0); - glDisable(GL_CULL_FACE); - glEnable(GL_BLEND); - glDisable(GL_LIGHTING); - if(skyboxtexture)glEnable(GL_TEXTURE_2D); - glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - glBindTexture(GL_TEXTURE_2D, front); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - glBegin(GL_QUADS); - glNormal3f( 0.0f, 0.0f, -1); - glTexCoord2f(0, 0); glVertex3f(-size, -size, size); - glTexCoord2f(1, 0); glVertex3f( size, -size, size); - glTexCoord2f(1, 1); glVertex3f( size, size, size); - glTexCoord2f(0, 1); glVertex3f(-size, size, size); - glEnd(); - glBindTexture(GL_TEXTURE_2D, back); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - glBegin(GL_QUADS); - glNormal3f( 0.0f, 0.0f, 1); - glTexCoord2f(1, 0); glVertex3f(-size, -size, -size); - glTexCoord2f(1, 1); glVertex3f(-size, size, -size); - glTexCoord2f(0, 1); glVertex3f( size, size, -size); - glTexCoord2f(0, 0); glVertex3f( size, -size, -size); - glEnd(); - glBindTexture(GL_TEXTURE_2D, up); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - glBegin(GL_QUADS); - glNormal3f( 0.0f, -1.0f, 0); - glTexCoord2f(0, 1); glVertex3f(-size, size, -size); - glTexCoord2f(0, 0); glVertex3f(-size, size, size); - glTexCoord2f(1, 0); glVertex3f( size, size, size); - glTexCoord2f(1, 1); glVertex3f( size, size, -size); - glEnd(); - glBindTexture(GL_TEXTURE_2D, down); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - glBegin(GL_QUADS); - glNormal3f( 0.0f, 1.0f, 0); + if (!skyboxtexture) { + glDisable(GL_TEXTURE_2D); + glColor3f(skyboxr * .8, skyboxg * .8, skyboxb * .8); + } + glDepthMask(0); + glDisable(GL_CULL_FACE); + glEnable(GL_BLEND); + glDisable(GL_LIGHTING); + if (skyboxtexture) + glEnable(GL_TEXTURE_2D); + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); + front.bind(); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glBegin(GL_QUADS); + glNormal3f( 0.0f, 0.0f, -1); + glTexCoord2f(0, 0); + glVertex3f(-size, -size, size); + glTexCoord2f(1, 0); + glVertex3f( size, -size, size); + glTexCoord2f(1, 1); + glVertex3f( size, size, size); + glTexCoord2f(0, 1); + glVertex3f(-size, size, size); + glEnd(); + back.bind(); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glBegin(GL_QUADS); + glNormal3f( 0.0f, 0.0f, 1); + glTexCoord2f(1, 0); + glVertex3f(-size, -size, -size); + glTexCoord2f(1, 1); + glVertex3f(-size, size, -size); + glTexCoord2f(0, 1); + glVertex3f( size, size, -size); + glTexCoord2f(0, 0); + glVertex3f( size, -size, -size); + glEnd(); + up.bind(); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glBegin(GL_QUADS); + glNormal3f( 0.0f, -1.0f, 0); + glTexCoord2f(0, 1); + glVertex3f(-size, size, -size); + glTexCoord2f(0, 0); + glVertex3f(-size, size, size); + glTexCoord2f(1, 0); + glVertex3f( size, size, size); + glTexCoord2f(1, 1); + glVertex3f( size, size, -size); + glEnd(); + down.bind(); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glBegin(GL_QUADS); + glNormal3f( 0.0f, 1.0f, 0); - glTexCoord2f(0, 0); glVertex3f(-size, -size, -size); - glTexCoord2f(1, 0); glVertex3f( size, -size, -size); - glTexCoord2f(1, 1); glVertex3f( size, -size, size); - glTexCoord2f(0, 1); glVertex3f(-size, -size, size); - glEnd(); - glBindTexture(GL_TEXTURE_2D, right); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - glBegin(GL_QUADS); - glNormal3f( -1.0f, 0.0f, 0); - glTexCoord2f(1, 0); glVertex3f( size, -size, -size); - glTexCoord2f(1, 1); glVertex3f( size, size, -size); - glTexCoord2f(0, 1); glVertex3f( size, size, size); - glTexCoord2f(0, 0); glVertex3f( size, -size, size); - glEnd(); - glBindTexture(GL_TEXTURE_2D, left); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - glBegin(GL_QUADS); - glNormal3f( 1.0f, 0.0f, 0); - glTexCoord2f(0, 0); glVertex3f(-size, -size, -size); - glTexCoord2f(1, 0); glVertex3f(-size, -size, size); - glTexCoord2f(1, 1); glVertex3f(-size, size, size); - glTexCoord2f(0, 1); glVertex3f(-size, size, -size); - glEnd(); - glEnable(GL_CULL_FACE); - glDepthMask(1); - glPopMatrix(); + glTexCoord2f(0, 0); + glVertex3f(-size, -size, -size); + glTexCoord2f(1, 0); + glVertex3f( size, -size, -size); + glTexCoord2f(1, 1); + glVertex3f( size, -size, size); + glTexCoord2f(0, 1); + glVertex3f(-size, -size, size); + glEnd(); + right.bind(); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glBegin(GL_QUADS); + glNormal3f( -1.0f, 0.0f, 0); + glTexCoord2f(1, 0); + glVertex3f( size, -size, -size); + glTexCoord2f(1, 1); + glVertex3f( size, size, -size); + glTexCoord2f(0, 1); + glVertex3f( size, size, size); + glTexCoord2f(0, 0); + glVertex3f( size, -size, size); + glEnd(); + left.bind(); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + glBegin(GL_QUADS); + glNormal3f( 1.0f, 0.0f, 0); + glTexCoord2f(0, 0); + glVertex3f(-size, -size, -size); + glTexCoord2f(1, 0); + glVertex3f(-size, -size, size); + glTexCoord2f(1, 1); + glVertex3f(-size, size, size); + glTexCoord2f(0, 1); + glVertex3f(-size, size, -size); + glEnd(); + glEnable(GL_CULL_FACE); + glDepthMask(1); + glPopMatrix(); } SkyBox::~SkyBox() { - if (front) glDeleteTextures( 1, &front ); - if (left) glDeleteTextures( 1, &left ); - if (back) glDeleteTextures( 1, &back ); - if (right) glDeleteTextures( 1, &right ); - if (up) glDeleteTextures( 1, &up ); - if (down) glDeleteTextures( 1, &down ); + front.destroy(); + left.destroy(); + back.destroy(); + right.destroy(); + up.destroy(); + down.destroy(); };