mirror of
https://git.code.sf.net/p/quake/newtree
synced 2025-02-16 16:41:30 +00:00
Skyboxes fixed, blending fixed, cleaned out some of the old sky cruft..
This commit is contained in:
parent
1a72e3ad83
commit
c6d9fea93c
3 changed files with 90 additions and 444 deletions
|
@ -259,9 +259,7 @@ void EmitWaterPolys (msurface_t *fa);
|
|||
void EmitSkyPolys (msurface_t *fa);
|
||||
void R_DrawSkyChain (msurface_t *s);
|
||||
void R_LoadSkys (char *);
|
||||
//void R_ClearSkyBox (void);
|
||||
//void R_DrawSkyBox (void);
|
||||
void R_Sky (void);
|
||||
void R_DrawSky (void);
|
||||
|
||||
//
|
||||
// gl_draw.c
|
||||
|
|
|
@ -1211,22 +1211,13 @@ void R_DrawWorld (void)
|
|||
glColor3f (1.0, 1.0, 1.0);
|
||||
memset (lightmap_polys, 0, sizeof(lightmap_polys));
|
||||
// Be sure to clear the skybox --KB
|
||||
R_Sky ();
|
||||
// R_ClearSkyBox ();
|
||||
R_DrawSky ();
|
||||
|
||||
R_RecursiveWorldNode (cl.worldmodel->nodes);
|
||||
|
||||
DrawTextureChains ();
|
||||
|
||||
R_BlendLightmaps ();
|
||||
|
||||
// Adjust the depth range and draw the skybox, ensuring it's behind
|
||||
// everhting else. This fixes the problem where some things are
|
||||
// drawn as sky when something else should be drawn. --KB
|
||||
// glColor3f (0.5, 0.5, 0.5);
|
||||
// glDepthRange (gldepthmax, gldepthmax);
|
||||
// R_DrawSkyBox ();
|
||||
// glDepthRange (gldepthmin, gldepthmax);
|
||||
}
|
||||
|
||||
|
||||
|
|
519
source/gl_warp.c
519
source/gl_warp.c
|
@ -643,82 +643,88 @@ void R_LoadSkys (char * skyname)
|
|||
}
|
||||
|
||||
void
|
||||
R_SkyBoxPolyVec(float s, float t, float x, float y, float z)
|
||||
R_SkyBoxPolyVec(vec5_t v)
|
||||
{
|
||||
// avoid interpolation seams
|
||||
s = s * (254.0/256.0) + (1.0/256.0);
|
||||
t = t * (254.0/256.0) + (1.0/256.0);
|
||||
glTexCoord2f(s, t);
|
||||
glVertex3f(r_refdef.vieworg[0] + x * 1024,
|
||||
r_refdef.vieworg[1] + y * 1024,
|
||||
r_refdef.vieworg[2] + z * 1024);
|
||||
// s = s * (254.0/256.0) + (1.0/256.0);
|
||||
// t = t * (254.0/256.0) + (1.0/256.0);
|
||||
glTexCoord2fv (v);
|
||||
glVertex3f (r_refdef.vieworg[0] + v[2],
|
||||
r_refdef.vieworg[1] + v[3],
|
||||
r_refdef.vieworg[2] + v[4]);
|
||||
}
|
||||
|
||||
#define ftc(x) (x * (254.0/256.0) + (1.0/256.0))
|
||||
|
||||
void R_SkyBox()
|
||||
vec5_t skyvec[6][4] = {
|
||||
{
|
||||
// right
|
||||
{ftc(1), ftc(0), 1024, 1024, 1024},
|
||||
{ftc(1), ftc(1), 1024, 1024, -1024},
|
||||
{ftc(0), ftc(1), -1024, 1024, -1024},
|
||||
{ftc(0), ftc(0), -1024, 1024, 1024}
|
||||
},
|
||||
{
|
||||
// back
|
||||
{ftc(1), ftc(0), -1024, 1024, 1024},
|
||||
{ftc(1), ftc(1), -1024, 1024, -1024},
|
||||
{ftc(0), ftc(1), -1024, -1024, -1024},
|
||||
{ftc(0), ftc(0), -1024, -1024, 1024}
|
||||
},
|
||||
{
|
||||
// left
|
||||
{ftc(1), ftc(0), -1024, -1024, 1024},
|
||||
{ftc(1), ftc(1), -1024, -1024, -1024},
|
||||
{ftc(0), ftc(1), 1024, -1024, -1024},
|
||||
{ftc(0), ftc(0), 1024, -1024, 1024}
|
||||
},
|
||||
{
|
||||
// front
|
||||
{ftc(1), ftc(0), 1024, -1024, 1024},
|
||||
{ftc(1), ftc(1), 1024, -1024, -1024},
|
||||
{ftc(0), ftc(1), 1024, 1024, -1024},
|
||||
{ftc(0), ftc(0), 1024, 1024, 1024}
|
||||
},
|
||||
{
|
||||
// up
|
||||
{ftc(1), ftc(0), 1024, -1024, 1024},
|
||||
{ftc(1), ftc(1), 1024, 1024, 1024},
|
||||
{ftc(0), ftc(1), -1024, 1024, 1024},
|
||||
{ftc(0), ftc(0), -1024, -1024, 1024}
|
||||
},
|
||||
{
|
||||
// down
|
||||
{ftc(1), ftc(0), 1024, 1024, -1024},
|
||||
{ftc(1), ftc(1), 1024, -1024, -1024},
|
||||
{ftc(0), ftc(1), -1024, -1024, -1024},
|
||||
{ftc(0), ftc(0), -1024, 1024, -1024}
|
||||
}
|
||||
};
|
||||
|
||||
#undef ftc
|
||||
|
||||
void
|
||||
R_DrawSkyBox (void)
|
||||
{
|
||||
GL_DisableMultitexture();
|
||||
int i, j;
|
||||
|
||||
GL_DisableMultitexture ();
|
||||
glEnable (GL_DEPTH_TEST);
|
||||
glDepthFunc (GL_ALWAYS);
|
||||
glDisable (GL_BLEND);
|
||||
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
glDepthRange ((gldepthmax-gldepthmin)*0.95+gldepthmin, gldepthmax);
|
||||
// glDisable (GL_BLEND);
|
||||
// glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
glDepthRange (gldepthmax, gldepthmax);
|
||||
glColor3f (0.5, 0.5, 0.5);
|
||||
|
||||
// front
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + 3);
|
||||
glBegin(GL_QUADS);
|
||||
R_SkyBoxPolyVec(1, 0, 1, -1, 1);
|
||||
R_SkyBoxPolyVec(1, 1, 1, -1, -1);
|
||||
R_SkyBoxPolyVec(0, 1, 1, 1, -1);
|
||||
R_SkyBoxPolyVec(0, 0, 1, 1, 1);
|
||||
glEnd();
|
||||
|
||||
// back
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + 1);
|
||||
glBegin(GL_QUADS);
|
||||
R_SkyBoxPolyVec(1, 0, -1, 1, 1);
|
||||
R_SkyBoxPolyVec(1, 1, -1, 1, -1);
|
||||
R_SkyBoxPolyVec(0, 1, -1, -1, -1);
|
||||
R_SkyBoxPolyVec(0, 0, -1, -1, 1);
|
||||
glEnd();
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + i);
|
||||
glBegin(GL_QUADS);
|
||||
for (j = 0; j < 4; j++)
|
||||
R_SkyBoxPolyVec(skyvec[i][j]);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
// right
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + 0);
|
||||
glBegin(GL_QUADS);
|
||||
R_SkyBoxPolyVec(1, 0, 1, 1, 1);
|
||||
R_SkyBoxPolyVec(1, 1, 1, 1, -1);
|
||||
R_SkyBoxPolyVec(0, 1, -1, 1, -1);
|
||||
R_SkyBoxPolyVec(0, 0, -1, 1, 1);
|
||||
glEnd();
|
||||
|
||||
// left
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + 2);
|
||||
glBegin(GL_QUADS);
|
||||
R_SkyBoxPolyVec(1, 0, -1, -1, 1);
|
||||
R_SkyBoxPolyVec(1, 1, -1, -1, -1);
|
||||
R_SkyBoxPolyVec(0, 1, 1, -1, -1);
|
||||
R_SkyBoxPolyVec(0, 0, 1, -1, 1);
|
||||
glEnd();
|
||||
|
||||
// top
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + 4);
|
||||
glBegin(GL_QUADS);
|
||||
R_SkyBoxPolyVec(1, 0, 1, -1, 1);
|
||||
R_SkyBoxPolyVec(1, 1, 1, 1, 1);
|
||||
R_SkyBoxPolyVec(0, 1, -1, 1, 1);
|
||||
R_SkyBoxPolyVec(0, 0, -1, -1, 1);
|
||||
glEnd();
|
||||
|
||||
// bottom
|
||||
glBindTexture(GL_TEXTURE_2D, SKY_TEX + 5);
|
||||
glBegin(GL_QUADS);
|
||||
R_SkyBoxPolyVec(1, 0, 1, 1, -1);
|
||||
R_SkyBoxPolyVec(1, 1, 1, -1, -1);
|
||||
R_SkyBoxPolyVec(0, 1, -1, -1, -1);
|
||||
R_SkyBoxPolyVec(0, 0, -1, 1, -1);
|
||||
glEnd();
|
||||
|
||||
glColor3f (1,1,1);
|
||||
glDepthFunc (GL_LEQUAL);
|
||||
glEnable (GL_DEPTH_TEST);
|
||||
|
@ -728,7 +734,7 @@ void R_SkyBox()
|
|||
|
||||
vec3_t domescale;
|
||||
void
|
||||
skydome(float s)
|
||||
R_DrawSkyLayer (float s)
|
||||
{
|
||||
float a, b, x, y, a1x, a1y, a2x, a2y;
|
||||
vec3_t v;
|
||||
|
@ -770,403 +776,54 @@ skydome(float s)
|
|||
|
||||
|
||||
void
|
||||
R_SkyDome()
|
||||
R_DrawSkyDome (void)
|
||||
{
|
||||
GL_DisableMultitexture();
|
||||
GL_DisableMultitexture ();
|
||||
glEnable (GL_DEPTH_TEST);
|
||||
glDepthFunc (GL_ALWAYS);
|
||||
glDisable (GL_BLEND);
|
||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthRange((gldepthmax-gldepthmin)*0.95+gldepthmin,gldepthmax);
|
||||
glColor3f(0.5,0.5,0.5);
|
||||
// glDisable (GL_BLEND);
|
||||
// glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthRange (gldepthmax, gldepthmax);
|
||||
glColor3f (0.5, 0.5, 0.5);
|
||||
|
||||
// base sky
|
||||
glBindTexture(GL_TEXTURE_2D, solidskytexture);
|
||||
glBindTexture (GL_TEXTURE_2D, solidskytexture);
|
||||
domescale[0] = 512;
|
||||
domescale[1] = 512;
|
||||
domescale[2] = 128;
|
||||
speedscale = realtime*8;
|
||||
speedscale -= (int)speedscale & ~127;
|
||||
skydome(speedscale);
|
||||
R_DrawSkyLayer (speedscale);
|
||||
glEnable (GL_BLEND);
|
||||
|
||||
// clouds
|
||||
glBindTexture(GL_TEXTURE_2D, alphaskytexture);
|
||||
glBindTexture (GL_TEXTURE_2D, alphaskytexture);
|
||||
domescale[0] = 512;
|
||||
domescale[1] = 512;
|
||||
domescale[2] = 128;
|
||||
speedscale = realtime*16;
|
||||
speedscale -= (int)speedscale & ~127;
|
||||
skydome(speedscale);
|
||||
R_DrawSkyLayer (speedscale);
|
||||
|
||||
glDisable (GL_BLEND);
|
||||
// glDisable (GL_BLEND);
|
||||
glColor3f (1,1,1);
|
||||
glDepthFunc (GL_LEQUAL);
|
||||
glEnable (GL_DEPTH_TEST);
|
||||
glDepthRange(gldepthmin, gldepthmax);
|
||||
glDepthRange (gldepthmin, gldepthmax);
|
||||
}
|
||||
|
||||
void
|
||||
R_Sky ( void )
|
||||
R_DrawSky ( void )
|
||||
{
|
||||
if (skyloaded)
|
||||
R_SkyBox();
|
||||
R_DrawSkyBox();
|
||||
else
|
||||
R_SkyDome();
|
||||
R_DrawSkyDome();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
vec3_t skyclip[6] = {
|
||||
{1,1,0},
|
||||
{1,-1,0},
|
||||
{0,-1,1},
|
||||
{0,1,1},
|
||||
{1,0,1},
|
||||
{-1,0,1}
|
||||
};
|
||||
int c_sky;
|
||||
|
||||
// 1 = s, 2 = t, 3 = 2048
|
||||
int st_to_vec[6][3] =
|
||||
{
|
||||
{3,-1,2},
|
||||
{-3,1,2},
|
||||
|
||||
{1,3,2},
|
||||
{-1,-3,2},
|
||||
|
||||
{-2,-1,3}, // 0 degrees yaw, look straight up
|
||||
{2,-1,-3} // look straight down
|
||||
|
||||
// {-1,2,3},
|
||||
// {1,2,-3}
|
||||
};
|
||||
|
||||
// s = [0]/[2], t = [1]/[2]
|
||||
int vec_to_st[6][3] =
|
||||
{
|
||||
{-2,3,1},
|
||||
{2,3,-1},
|
||||
|
||||
{1,3,2},
|
||||
{-1,3,-2},
|
||||
|
||||
{-2,-1,3},
|
||||
{-2,1,-3}
|
||||
|
||||
// {-1,2,3},
|
||||
// {1,2,-3}
|
||||
};
|
||||
|
||||
float skymins[2][6], skymaxs[2][6];
|
||||
|
||||
void DrawSkyPolygon (int nump, vec3_t vecs)
|
||||
{
|
||||
int i,j;
|
||||
vec3_t v, av;
|
||||
float s, t, dv;
|
||||
int axis;
|
||||
float *vp;
|
||||
|
||||
c_sky++;
|
||||
// decide which face it maps to
|
||||
VectorCopy (vec3_origin, v);
|
||||
for (i=0, vp=vecs ; i<nump ; i++, vp+=3)
|
||||
{
|
||||
VectorAdd (vp, v, v);
|
||||
}
|
||||
av[0] = fabs(v[0]);
|
||||
av[1] = fabs(v[1]);
|
||||
av[2] = fabs(v[2]);
|
||||
if (av[0] > av[1] && av[0] > av[2])
|
||||
{
|
||||
if (v[0] < 0)
|
||||
axis = 1;
|
||||
else
|
||||
axis = 0;
|
||||
}
|
||||
else if (av[1] > av[2] && av[1] > av[0])
|
||||
{
|
||||
if (v[1] < 0)
|
||||
axis = 3;
|
||||
else
|
||||
axis = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (v[2] < 0)
|
||||
axis = 5;
|
||||
else
|
||||
axis = 4;
|
||||
}
|
||||
|
||||
// project new texture coords
|
||||
for (i=0 ; i<nump ; i++, vecs+=3)
|
||||
{
|
||||
j = vec_to_st[axis][2];
|
||||
if (j > 0)
|
||||
dv = vecs[j - 1];
|
||||
else
|
||||
dv = -vecs[-j - 1];
|
||||
|
||||
j = vec_to_st[axis][0];
|
||||
if (j < 0)
|
||||
s = -vecs[-j -1] / dv;
|
||||
else
|
||||
s = vecs[j-1] / dv;
|
||||
j = vec_to_st[axis][1];
|
||||
if (j < 0)
|
||||
t = -vecs[-j -1] / dv;
|
||||
else
|
||||
t = vecs[j-1] / dv;
|
||||
|
||||
if (s < skymins[0][axis])
|
||||
skymins[0][axis] = s;
|
||||
if (t < skymins[1][axis])
|
||||
skymins[1][axis] = t;
|
||||
if (s > skymaxs[0][axis])
|
||||
skymaxs[0][axis] = s;
|
||||
if (t > skymaxs[1][axis])
|
||||
skymaxs[1][axis] = t;
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_CLIP_VERTS 64
|
||||
void ClipSkyPolygon (int nump, vec3_t vecs, int stage)
|
||||
{
|
||||
float *norm;
|
||||
float *v;
|
||||
qboolean front, back;
|
||||
float d, e;
|
||||
float dists[MAX_CLIP_VERTS];
|
||||
int sides[MAX_CLIP_VERTS];
|
||||
vec3_t newv[2][MAX_CLIP_VERTS];
|
||||
int newc[2];
|
||||
int i, j;
|
||||
|
||||
if (nump > MAX_CLIP_VERTS-2)
|
||||
Sys_Error ("ClipSkyPolygon: MAX_CLIP_VERTS");
|
||||
if (stage == 6)
|
||||
{ // fully clipped, so draw it
|
||||
DrawSkyPolygon (nump, vecs);
|
||||
return;
|
||||
}
|
||||
|
||||
front = back = false;
|
||||
norm = skyclip[stage];
|
||||
for (i=0, v = vecs ; i<nump ; i++, v+=3)
|
||||
{
|
||||
d = DotProduct (v, norm);
|
||||
if (d > ON_EPSILON)
|
||||
{
|
||||
front = true;
|
||||
sides[i] = SIDE_FRONT;
|
||||
}
|
||||
else if (d < ON_EPSILON)
|
||||
{
|
||||
back = true;
|
||||
sides[i] = SIDE_BACK;
|
||||
}
|
||||
else
|
||||
sides[i] = SIDE_ON;
|
||||
dists[i] = d;
|
||||
}
|
||||
|
||||
if (!front || !back)
|
||||
{ // not clipped
|
||||
ClipSkyPolygon (nump, vecs, stage+1);
|
||||
return;
|
||||
}
|
||||
|
||||
// clip it
|
||||
sides[i] = sides[0];
|
||||
dists[i] = dists[0];
|
||||
VectorCopy (vecs, (vecs+(i*3)) );
|
||||
newc[0] = newc[1] = 0;
|
||||
|
||||
for (i=0, v = vecs ; i<nump ; i++, v+=3)
|
||||
{
|
||||
switch (sides[i])
|
||||
{
|
||||
case SIDE_FRONT:
|
||||
VectorCopy (v, newv[0][newc[0]]);
|
||||
newc[0]++;
|
||||
break;
|
||||
case SIDE_BACK:
|
||||
VectorCopy (v, newv[1][newc[1]]);
|
||||
newc[1]++;
|
||||
break;
|
||||
case SIDE_ON:
|
||||
VectorCopy (v, newv[0][newc[0]]);
|
||||
newc[0]++;
|
||||
VectorCopy (v, newv[1][newc[1]]);
|
||||
newc[1]++;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sides[i] == SIDE_ON || sides[i+1] == SIDE_ON || sides[i+1] == sides[i])
|
||||
continue;
|
||||
|
||||
d = dists[i] / (dists[i] - dists[i+1]);
|
||||
for (j=0 ; j<3 ; j++)
|
||||
{
|
||||
e = v[j] + d*(v[j+3] - v[j]);
|
||||
newv[0][newc[0]][j] = e;
|
||||
newv[1][newc[1]][j] = e;
|
||||
}
|
||||
newc[0]++;
|
||||
newc[1]++;
|
||||
}
|
||||
|
||||
// continue
|
||||
ClipSkyPolygon (newc[0], newv[0][0], stage+1);
|
||||
ClipSkyPolygon (newc[1], newv[1][0], stage+1);
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
R_DrawSkyChain
|
||||
=================
|
||||
*/
|
||||
void R_DrawSkyChain (msurface_t *s)
|
||||
{
|
||||
msurface_t *fa;
|
||||
|
||||
int i;
|
||||
vec3_t verts[MAX_CLIP_VERTS];
|
||||
glpoly_t *p;
|
||||
|
||||
if (allowskybox && skyloaded)
|
||||
{
|
||||
c_sky = 0;
|
||||
glBindTexture (GL_TEXTURE_2D, solidskytexture);
|
||||
|
||||
// calculate vertex values for sky box
|
||||
|
||||
for (fa=s ; fa ; fa=fa->texturechain)
|
||||
{
|
||||
for (p=fa->polys ; p ; p=p->next)
|
||||
{
|
||||
for (i=0 ; i<p->numverts ; i++)
|
||||
{
|
||||
VectorSubtract (p->verts[i], r_origin, verts[i]);
|
||||
}
|
||||
ClipSkyPolygon (p->numverts, verts[0], 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// skies have no lightmap to prevent overbrighting --KB
|
||||
glColor3f (0.5, 0.5, 0.5);
|
||||
|
||||
GL_DisableMultitexture();
|
||||
|
||||
// used when gl_texsort is on
|
||||
glBindTexture (GL_TEXTURE_2D, solidskytexture);
|
||||
speedscale = realtime*8;
|
||||
speedscale -= (int)speedscale & ~127 ;
|
||||
|
||||
for (fa=s ; fa ; fa=fa->texturechain)
|
||||
EmitSkyPolys (fa);
|
||||
|
||||
glBindTexture (GL_TEXTURE_2D, alphaskytexture);
|
||||
speedscale = realtime*16;
|
||||
speedscale -= (int)speedscale & ~127 ;
|
||||
|
||||
for (fa=s ; fa ; fa=fa->texturechain)
|
||||
EmitSkyPolys (fa);
|
||||
|
||||
// the rest of the texture chain does though --KB
|
||||
glColor3f (1.0, 1.0, 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
R_ClearSkyBox
|
||||
==============
|
||||
*/
|
||||
void R_ClearSkyBox (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
skymins[0][i] = skymins[1][i] = 9999;
|
||||
skymaxs[0][i] = skymaxs[1][i] = -9999;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MakeSkyVec (float s, float t, int axis)
|
||||
{
|
||||
vec3_t v, b;
|
||||
int j, k;
|
||||
|
||||
b[0] = s*2048;
|
||||
b[1] = t*2048;
|
||||
b[2] = 2048;
|
||||
|
||||
for (j=0 ; j<3 ; j++)
|
||||
{
|
||||
k = st_to_vec[axis][j];
|
||||
if (k < 0)
|
||||
v[j] = -b[-k - 1];
|
||||
else
|
||||
v[j] = b[k - 1];
|
||||
v[j] += r_origin[j];
|
||||
}
|
||||
|
||||
// avoid bilerp seam
|
||||
s = (s+1)*0.5;
|
||||
t = (t+1)*0.5;
|
||||
|
||||
if (s < 1.0/512)
|
||||
s = 1.0/512;
|
||||
else if (s > 511.0/512)
|
||||
s = 511.0/512;
|
||||
if (t < 1.0/512)
|
||||
t = 1.0/512;
|
||||
else if (t > 511.0/512)
|
||||
t = 511.0/512;
|
||||
|
||||
t = 1.0 - t;
|
||||
glTexCoord2f (s, t);
|
||||
glVertex3fv (v);
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
R_DrawSkyBox
|
||||
==============
|
||||
*/
|
||||
int skytexorder[6] = {0,2,1,3,4,5};
|
||||
void R_DrawSkyBox (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
if (skymins[0][i] >= skymaxs[0][i]
|
||||
|| skymins[1][i] >= skymaxs[1][i])
|
||||
continue;
|
||||
|
||||
glBindTexture (GL_TEXTURE_2D, SKY_TEX+skytexorder[i]);
|
||||
glBegin (GL_QUADS);
|
||||
MakeSkyVec (skymins[0][i], skymins[1][i], i);
|
||||
MakeSkyVec (skymins[0][i], skymaxs[1][i], i);
|
||||
MakeSkyVec (skymaxs[0][i], skymaxs[1][i], i);
|
||||
MakeSkyVec (skymaxs[0][i], skymins[1][i], i);
|
||||
glEnd ();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//===============================================================
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue