]> git.jsancho.org Git - lugaru.git/blob - Source/Skybox.cpp
776d05e0e8c8e0b005227ce37a608584f44efdaa
[lugaru.git] / Source / Skybox.cpp
1 /*
2 Copyright (C) 2003, 2010 - Wolfire Games
3
4 This file is part of Lugaru.
5
6 Lugaru is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */
21
22 #include "Skybox.h"
23 #include "Game.h"
24
25 extern float viewdistance;
26 extern float blurness;
27 extern int environment;
28 extern bool skyboxtexture;
29 extern float skyboxr;
30 extern float skyboxg;
31 extern float skyboxb;
32
33 void
34 SkyBox::load (const char *ffront, const char *fleft, const char *fback,
35               const char *fright, const char *fup,   const char *fdown)
36 {
37     front.load(ffront, true, false);
38     left.load(fleft, true, false);
39     back.load(fback, true, false);
40     right.load(fright, true, false);
41     up.load(fup, true, false);
42     down.load(fdown, true, false);
43 }
44
45 void    SkyBox::draw()
46 {
47     static float size = viewdistance / 4;
48     glPushMatrix();
49     static GLfloat M[16];
50     glGetFloatv(GL_MODELVIEW_MATRIX, M);
51     M[12] = 0;
52     M[13] = 0;
53     M[14] = 0;
54     glLoadMatrixf(M);
55     if (environment == 2)glScalef(1 + blurness / 1000, 1, 1 + blurness / 1000);
56     if (environment != 2)glColor3f(.85 * skyboxr, .85 * skyboxg, .95 * skyboxb);
57     else glColor3f(1 * skyboxr, .95 * skyboxg, .95 * skyboxb);
58
59     if (!skyboxtexture) {
60         glDisable(GL_TEXTURE_2D);
61         glColor3f(skyboxr * .8, skyboxg * .8, skyboxb * .8);
62     }
63     glDepthMask(0);
64     glDisable(GL_CULL_FACE);
65     glEnable(GL_BLEND);
66     glDisable(GL_LIGHTING);
67     if (skyboxtexture)glEnable(GL_TEXTURE_2D);
68     glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
69     front.bind();
70     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
71     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
72     glBegin(GL_QUADS);
73     glNormal3f( 0.0f, 0.0f, -1);
74     glTexCoord2f(0, 0);
75     glVertex3f(-size, -size,  size);
76     glTexCoord2f(1, 0);
77     glVertex3f( size, -size,  size);
78     glTexCoord2f(1, 1);
79     glVertex3f( size,  size,  size);
80     glTexCoord2f(0, 1);
81     glVertex3f(-size,  size,  size);
82     glEnd();
83     back.bind();
84     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
85     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
86     glBegin(GL_QUADS);
87     glNormal3f( 0.0f, 0.0f, 1);
88     glTexCoord2f(1, 0);
89     glVertex3f(-size, -size, -size);
90     glTexCoord2f(1, 1);
91     glVertex3f(-size,  size, -size);
92     glTexCoord2f(0, 1);
93     glVertex3f( size,  size, -size);
94     glTexCoord2f(0, 0);
95     glVertex3f( size, -size, -size);
96     glEnd();
97     up.bind();
98     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
99     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
100     glBegin(GL_QUADS);
101     glNormal3f( 0.0f, -1.0f, 0);
102     glTexCoord2f(0, 1);
103     glVertex3f(-size,  size, -size);
104     glTexCoord2f(0, 0);
105     glVertex3f(-size,  size,  size);
106     glTexCoord2f(1, 0);
107     glVertex3f( size,  size,  size);
108     glTexCoord2f(1, 1);
109     glVertex3f( size,  size, -size);
110     glEnd();
111     down.bind();
112     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
113     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
114     glBegin(GL_QUADS);
115     glNormal3f( 0.0f, 1.0f, 0);
116
117     glTexCoord2f(0, 0);
118     glVertex3f(-size, -size, -size);
119     glTexCoord2f(1, 0);
120     glVertex3f( size, -size, -size);
121     glTexCoord2f(1, 1);
122     glVertex3f( size, -size,  size);
123     glTexCoord2f(0, 1);
124     glVertex3f(-size, -size,  size);
125     glEnd();
126     right.bind();
127     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
128     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
129     glBegin(GL_QUADS);
130     glNormal3f( -1.0f, 0.0f, 0);
131     glTexCoord2f(1, 0);
132     glVertex3f( size, -size, -size);
133     glTexCoord2f(1, 1);
134     glVertex3f( size,  size, -size);
135     glTexCoord2f(0, 1);
136     glVertex3f( size,  size,  size);
137     glTexCoord2f(0, 0);
138     glVertex3f( size, -size,  size);
139     glEnd();
140     left.bind();
141     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
142     glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
143     glBegin(GL_QUADS);
144     glNormal3f( 1.0f, 0.0f, 0);
145     glTexCoord2f(0, 0);
146     glVertex3f(-size, -size, -size);
147     glTexCoord2f(1, 0);
148     glVertex3f(-size, -size,  size);
149     glTexCoord2f(1, 1);
150     glVertex3f(-size,  size,  size);
151     glTexCoord2f(0, 1);
152     glVertex3f(-size,  size, -size);
153     glEnd();
154     glEnable(GL_CULL_FACE);
155     glDepthMask(1);
156     glPopMatrix();
157 }
158
159 SkyBox::~SkyBox()
160 {
161     front.destroy();
162     left.destroy();
163     back.destroy();
164     right.destroy();
165     up.destroy();
166     down.destroy();
167 };
168