finally. every condition I've been able to produce in start.bsp (quad jump to

the top of the map) works well. Depth issues have been taken care of as well
(sort of: same problems as non-clipped skybox, but you don't get sky IN the
map any more)
This commit is contained in:
Bill Currie 2000-12-02 05:32:50 +00:00
parent 6ced43e560
commit c90adba9dc

View file

@ -58,7 +58,7 @@ static const int faces_table[3][6] = {
{-1, 2, 2, -1, 5, 5}, {-1, 2, 2, -1, 5, 5},
}; };
/* convert face magic bit mask to index into visit array */ /* convert face magic bit mask to index into visit array */
static const int faces_bit_magic[] = {3, 4, -1, 0, 2, -1, 1, -1}; static const int faces_bit_magic[] = {2, 1, -1, 0, 3, -1, 4, -1};
/* axis the cube face cuts (also index into vec3_t and n % 3 for 0 <= n < 6) */ /* axis the cube face cuts (also index into vec3_t and n % 3 for 0 <= n < 6) */
static const int face_axis[] = {0, 1, 2, 0, 1, 2}; static const int face_axis[] = {0, 1, 2, 0, 1, 2};
/* offset on the axis the cube face cuts */ /* offset on the axis the cube face cuts */
@ -431,12 +431,12 @@ process_corners (struct box_def *box)
} else { } else {
// 3 vertexen // 3 vertexen
unsigned int sel = (((abs (visit[2].face - visit[0].face) == 3) << 4) unsigned int sel = (((abs (visit[2].face - visit[0].face) == 3) << 2)
| ((abs (visit[3].face - visit[1].face) == 3) << 3) | ((abs (visit[3].face - visit[1].face) == 3) << 1)
| ((abs (visit[4].face - visit[2].face) == 3) << 2)); | ((abs (visit[4].face - visit[2].face) == 3) << 0));
vec3_t v[3]; vec3_t v[3];
center = faces_bit_magic[sel]; center = faces_bit_magic[sel];
//printf ("%02o %d %d %d %d %d %d\n", sel, center, visit[0].face, visit[1].face, visit[2].face, visit[3].face, visit[4].face); printf ("%02o %d %d %d %d %d %d\n", sel, center, visit[0].face, visit[1].face, visit[2].face, visit[3].face, visit[4].face);
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
find_cube_vertex (visit[center].face, visit[(center + 1 + i) % 5].face, visit[(center + 2 + i) % 5].face, v[i]); find_cube_vertex (visit[center].face, visit[(center + 1 + i) % 5].face, visit[(center + 2 + i) % 5].face, v[i]);
insert_cube_vertexen (box, visit[center], 3, v[0], v[1], v[2]); insert_cube_vertexen (box, visit[center], 3, v[0], v[1], v[2]);
@ -604,6 +604,7 @@ R_DrawSkyChain (msurface_t *sky_chain)
{ {
msurface_t *sc = sky_chain; msurface_t *sc = sky_chain;
if (skyloaded) { if (skyloaded) {
glDepthRange (gldepthmax, gldepthmax);
while (sc) { while (sc) {
glpoly_t *p = sc->polys; glpoly_t *p = sc->polys;
while (p) { while (p) {
@ -612,6 +613,7 @@ R_DrawSkyChain (msurface_t *sky_chain)
} }
sc = sc->texturechain; sc = sc->texturechain;
} }
glDepthRange (gldepthmin, gldepthmax);
} else { } else {
while (sc) { while (sc) {
glpoly_t *p = sc->polys; glpoly_t *p = sc->polys;
@ -622,7 +624,7 @@ R_DrawSkyChain (msurface_t *sky_chain)
sc = sc->texturechain; sc = sc->texturechain;
} }
} }
#if 1 #if 0
glDisable (GL_TEXTURE_2D); glDisable (GL_TEXTURE_2D);
sc = sky_chain; sc = sky_chain;
glColor3f (1, 1, 1); glColor3f (1, 1, 1);