pass though indent, correct a comment and change vertexen to vertices

This commit is contained in:
Bill Currie 2000-12-02 06:09:18 +00:00
parent c90adba9dc
commit bd47fcf241

View file

@ -37,11 +37,12 @@
#include "glquake.h" #include "glquake.h"
#include "sys.h" #include "sys.h"
extern qboolean skyloaded; extern qboolean skyloaded;
extern vec5_t skyvec[6][4]; extern vec5_t skyvec[6][4];
/* cube face to sky texture offset conversion */ /* cube face to sky texture offset conversion */
static const int skytex_offs[] = {3, 0, 4, 1, 2, 5}; static const int skytex_offs[] = { 3, 0, 4, 1, 2, 5 };
/* clockwise loop through the cube faces adjoining the current face */ /* clockwise loop through the cube faces adjoining the current face */
static const int face_loop[6][5] = { static const int face_loop[6][5] = {
{1, 2, 4, 5, 1}, {1, 2, 4, 5, 1},
@ -51,37 +52,41 @@ static const int face_loop[6][5] = {
{0, 2, 3, 5, 0}, {0, 2, 3, 5, 0},
{0, 4, 3, 1, 0}, {0, 4, 3, 1, 0},
}; };
/* convert axis and face distance into face */ /* convert axis and face distance into face */
static const int faces_table[3][6] = { static const int faces_table[3][6] = {
{-1, 0, 0, -1, 3, 3}, {-1, 0, 0, -1, 3, 3},
{-1, 4, 4, -1, 1, 1}, {-1, 4, 4, -1, 1, 1},
{-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[] = {2, 1, -1, 0, 3, -1, 4, -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 */
static const vec_t face_offset[] = {1024, 1024, 1024, -1024, -1024, -1024}; static const vec_t face_offset[] = { 1024, 1024, 1024, -1024, -1024, -1024 };
/* cube face */ /* cube face */
struct face_def { struct face_def {
int tex; // texture to bind to int tex; // texture to bind to
glpoly_t poly; // describe the polygon of this face glpoly_t poly; // describe the polygon of this face
float verts[32][VERTEXSIZE]; float verts[32][VERTEXSIZE];
}; };
struct visit_def { struct visit_def {
int face; // face being visited int face; // face being visited
int leave; // vertex departed through int leave; // vertex departed through
}; };
/* our cube */ /* our cube */
struct box_def { struct box_def {
/* keep track of which cube faces we visit and in what order */ /* keep track of which cube faces we visit and in what order */
struct visit_def visited_faces [9]; struct visit_def visited_faces[9];
int face_visits [6]; int face_visits[6];
int face_count; int face_count;
/* the cube faces */ /* the cube faces */
struct face_def face[6]; struct face_def face[6];
}; };
@ -101,9 +106,9 @@ struct box_def {
static int static int
determine_face (vec3_t v) determine_face (vec3_t v)
{ {
float a[3]; float a[3];
float m; float m;
int i=0; int i = 0;
m = a[0] = fabs (v[0]); m = a[0] = fabs (v[0]);
a[1] = fabs (v[1]); a[1] = fabs (v[1]);
@ -121,7 +126,7 @@ determine_face (vec3_t v)
} }
if (v[i] < 0) if (v[i] < 0)
i += 3; i += 3;
VectorScale (v, 1024/m, v); VectorScale (v, 1024 / m, v);
return i; return i;
} }
@ -152,14 +157,18 @@ determine_face (vec3_t v)
static int static int
find_intersect (int face1, vec3_t x1, int face2, vec3_t x2, vec3_t y) find_intersect (int face1, vec3_t x1, int face2, vec3_t x2, vec3_t y)
{ {
vec3_t n; // normal to the plane formed by the eye and vec3_t n; // normal to the plane formed by the
// the two points on the cube. // eye and the two points on the cube.
vec3_t x = {0, 0, 0}; // point on cube edge of adjoining faces.
// always on an axis plane. vec3_t x = { 0, 0, 0 }; // point on cube edge of adjoining
vec3_t v = {0, 0, 0}; // direction vector of cube edge. always +ve // faces. always on an axis plane.
vec_t x_n, v_n; // x.n and v.n
int axis; vec3_t v = { 0, 0, 0 }; // direction vector of cube edge.
vec3_t t; // always +ve
vec_t x_n, v_n; // x.n and v.n
int axis;
vec3_t t;
x[face1 % 3] = 1024 * (1 - 2 * (face1 / 3)); x[face1 % 3] = 1024 * (1 - 2 * (face1 / 3));
x[face2 % 3] = 1024 * (1 - 2 * (face2 / 3)); x[face2 % 3] = 1024 * (1 - 2 * (face2 / 3));
@ -247,39 +256,42 @@ add_vertex (struct box_def *box, int face, vec3_t v)
} }
/* /*
insert_cube_vertexen insert_cube_vertices
insert the given cube vertexen into the vertex list of the poly in the insert the given cube vertices into the vertex list of the poly in the
correct location. correct location.
*/ */
static void static void
insert_cube_vertexen (struct box_def *box, struct visit_def visit, int count, ...) insert_cube_vertices (struct box_def *box, struct visit_def visit, int count,
...)
{ {
int i; int i;
vec3_t **v; vec3_t **v;
va_list args; va_list args;
int face = visit.face; int face = visit.face;
int ind = visit.leave + 1; int ind = visit.leave + 1;
va_start (args, count); va_start (args, count);
v = (vec3_t**)alloca (count * sizeof (vec3_t*)); v = (vec3_t **) alloca (count * sizeof (vec3_t *));
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
v[i] = va_arg (args, vec3_t*); v[i] = va_arg (args, vec3_t *);
} }
va_end (args); va_end (args);
if (ind == box->face[face].poly.numverts) { if (ind == box->face[face].poly.numverts) {
// the vertex the sky poly left this cube fase through is very // the vertex the sky poly left this cube fase through is very
// conveniently the last vertex of the face poly. this means we // conveniently the last vertex of the face poly. this means we
// can just append the two vetexen // can just append the vetexen
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
add_vertex (box, face, *v[i]); add_vertex (box, face, *v[i]);
} else { } else {
// we have to insert the cube vertexen into the face poly // we have to insert the cube vertices into the face poly
// vertex list // vertex list
glpoly_t *p = &box->face[face].poly; glpoly_t *p = &box->face[face].poly;
int c = p->numverts - ind; int c = p->numverts - ind;
const int vert_size = sizeof (p->verts[0]); const int vert_size = sizeof (p->verts[0]);
memmove (p->verts[ind + count], p->verts[ind], c * vert_size); memmove (p->verts[ind + count], p->verts[ind], c * vert_size);
p->numverts += count; p->numverts += count;
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
@ -299,9 +311,9 @@ static void
cross_cube_edge (struct box_def *box, int face1, vec3_t v1, int face2, cross_cube_edge (struct box_def *box, int face1, vec3_t v1, int face2,
vec3_t v2) vec3_t v2)
{ {
vec3_t l; vec3_t l;
int axis; int axis;
int face = -1; int face = -1;
axis = find_intersect (face1, v1, face2, v2, l); axis = find_intersect (face1, v1, face2, v2, l);
if (l[axis] > 1024) if (l[axis] > 1024)
@ -309,20 +321,22 @@ cross_cube_edge (struct box_def *box, int face1, vec3_t v1, int face2,
else if (l[axis] < -1024) else if (l[axis] < -1024)
face = axis + 3; face = axis + 3;
if (face > 0) { if (face > 0) {
vec3_t x; vec3_t x;
VectorAdd (v1, v2, x); VectorAdd (v1, v2, x);
VectorScale (x, 0.5, x); VectorScale (x, 0.5, x);
cross_cube_edge (box, face1, v1, face, x); cross_cube_edge (box, face1, v1, face, x);
cross_cube_edge (box, face, x, face2, v2); cross_cube_edge (box, face, x, face2, v2);
} else { } else {
struct visit_def *visit = box->visited_faces; struct visit_def *visit = box->visited_faces;
visit[box->face_count - 1].leave = box->face[face1].poly.numverts; visit[box->face_count - 1].leave = box->face[face1].poly.numverts;
visit[box->face_count].face = face2; visit[box->face_count].face = face2;
box->face_count++; box->face_count++;
box->face_visits[face2]++; box->face_visits[face2]++;
add_vertex(box, face1, l); add_vertex (box, face1, l);
add_vertex(box, face2, l); add_vertex (box, face2, l);
} }
} }
@ -335,9 +349,9 @@ static void
process_corners (struct box_def *box) process_corners (struct box_def *box)
{ {
struct visit_def *visit = box->visited_faces; struct visit_def *visit = box->visited_faces;
int max_visit = 0; int max_visit = 0;
int i; int i;
int center = -1; int center = -1;
if (visit[box->face_count - 1].face == visit[0].face) { if (visit[box->face_count - 1].face == visit[0].face) {
box->face_count--; box->face_count--;
@ -359,11 +373,12 @@ process_corners (struct box_def *box)
case 3: case 3:
// one corner, no edges // one corner, no edges
{ {
vec3_t v; vec3_t v;
find_cube_vertex (visit[0].face, visit[1].face, visit[2].face, v); find_cube_vertex (visit[0].face, visit[1].face, visit[2].face, v);
insert_cube_vertexen (box, visit[0], 1, v); insert_cube_vertices (box, visit[0], 1, v);
insert_cube_vertexen (box, visit[1], 1, v); insert_cube_vertices (box, visit[1], 1, v);
insert_cube_vertexen (box, visit[2], 1, v); insert_cube_vertices (box, visit[2], 1, v);
} }
break; break;
case 4: case 4:
@ -371,9 +386,9 @@ process_corners (struct box_def *box)
return; return;
if (abs (visit[2].face - visit[0].face) == 3 if (abs (visit[2].face - visit[0].face) == 3
&& abs (visit[3].face - visit[1].face) == 3) { && abs (visit[3].face - visit[1].face) == 3) {
// 4 vertexen // 4 vertices
int sum, diff; int sum, diff;
vec3_t v[4]; vec3_t v[4];
sum = visit[0].face + visit[1].face + visit[2].face + visit[3].face; sum = visit[0].face + visit[1].face + visit[2].face + visit[3].face;
diff = visit[1].face - visit[0].face; diff = visit[1].face - visit[0].face;
@ -381,16 +396,17 @@ process_corners (struct box_def *box)
diff = (diff + 6) % 6; diff = (diff + 6) % 6;
center = faces_table[sum][diff]; center = faces_table[sum][diff];
for (i=0; i < 4; i++) { for (i = 0; i < 4; i++) {
find_cube_vertex (visit[i].face, visit[(i + 1) & 3].face, center, v[i]); find_cube_vertex (visit[i].face, visit[(i + 1) & 3].face,
center, v[i]);
add_vertex (box, center, v[i]); add_vertex (box, center, v[i]);
} }
for (i=0; i < 4; i++) for (i = 0; i < 4; i++)
insert_cube_vertexen (box, visit[i], 2, v[i], v[(i - 1) & 3]); insert_cube_vertices (box, visit[i], 2, v[i], v[(i - 1) & 3]);
} else { } else {
// 2 vertexen // 2 vertices
int l_f, t_f, r_f, b_f; int l_f, t_f, r_f, b_f;
vec3_t v_l, v_r; vec3_t v_l, v_r;
if (abs (visit[2].face - visit[0].face) == 3) { if (abs (visit[2].face - visit[0].face) == 3) {
l_f = 0; l_f = 0;
@ -405,45 +421,54 @@ process_corners (struct box_def *box)
} else { } else {
return; return;
} }
find_cube_vertex (visit[l_f].face, visit[t_f].face, visit[b_f].face, v_l); find_cube_vertex (visit[l_f].face, visit[t_f].face, visit[b_f].face,
find_cube_vertex (visit[r_f].face, visit[t_f].face, visit[b_f].face, v_r); v_l);
find_cube_vertex (visit[r_f].face, visit[t_f].face, visit[b_f].face,
v_r);
insert_cube_vertexen (box, visit[t_f], 2, v_r, v_l); insert_cube_vertices (box, visit[t_f], 2, v_r, v_l);
insert_cube_vertexen (box, visit[b_f], 2, v_l, v_r); insert_cube_vertices (box, visit[b_f], 2, v_l, v_r);
insert_cube_vertexen (box, visit[l_f], 1, v_l); insert_cube_vertices (box, visit[l_f], 1, v_l);
insert_cube_vertexen (box, visit[r_f], 1, v_r); insert_cube_vertices (box, visit[r_f], 1, v_r);
} }
break; break;
case 5: case 5:
if (max_visit > 1) { if (max_visit > 1) {
// one vertex // one vertex
vec3_t v; vec3_t v;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
// don't need to check the 5th visit // don't need to check the 5th visit
if (visit[(i + 2) % 5].face == visit[(i + 4) % 5].face) if (visit[(i + 2) % 5].face == visit[(i + 4) % 5].face)
break; break;
} }
find_cube_vertex (visit[i].face, visit[(i + 1) % 5].face, visit[(i + 2) % 5].face, v); find_cube_vertex (visit[i].face, visit[(i + 1) % 5].face,
insert_cube_vertexen (box, visit[i], 1, v); visit[(i + 2) % 5].face, v);
insert_cube_vertexen (box, visit[(i + 1) % 5], 1, v); insert_cube_vertices (box, visit[i], 1, v);
insert_cube_vertexen (box, visit[(i + 4) % 5], 1, v); insert_cube_vertices (box, visit[(i + 1) % 5], 1, v);
insert_cube_vertices (box, visit[(i + 4) % 5], 1, v);
} else { } else {
// 3 vertexen // 3 vertices
unsigned int sel = (((abs (visit[2].face - visit[0].face) == 3) << 2) unsigned int sel =
| ((abs (visit[3].face - visit[1].face) == 3) << 1) (((abs (visit[2].face - visit[0].face) == 3) << 2) |
| ((abs (visit[4].face - visit[2].face) == 3) << 0)); ((abs (visit[3].face - visit[1].face) == 3) << 1)
vec3_t v[3]; | ((abs (visit[4].face - visit[2].face) == 3) << 0));
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,
insert_cube_vertexen (box, visit[center], 3, v[0], v[1], v[2]); visit[(center + 1 + i) % 5].face,
insert_cube_vertexen (box, visit[(center + 1) % 5], 1, v[0]); visit[(center + 2 + i) % 5].face, v[i]);
insert_cube_vertexen (box, visit[(center + 2) % 5], 2, v[1], v[0]); insert_cube_vertices (box, visit[center], 3, v[0], v[1], v[2]);
insert_cube_vertexen (box, visit[(center + 3) % 5], 2, v[2], v[1]); insert_cube_vertices (box, visit[(center + 1) % 5], 1, v[0]);
insert_cube_vertexen (box, visit[(center + 4) % 5], 1, v[2]); insert_cube_vertices (box, visit[(center + 2) % 5], 2, v[1], v[0]);
insert_cube_vertices (box, visit[(center + 3) % 5], 2, v[2], v[1]);
insert_cube_vertices (box, visit[(center + 4) % 5], 1, v[2]);
} }
break; break;
case 6: case 6:
@ -456,32 +481,36 @@ process_corners (struct box_def *box)
break; break;
} }
if (visit[(i + 3) % 6].face == visit[(i + 5) % 6].face) { if (visit[(i + 3) % 6].face == visit[(i + 5) % 6].face) {
// adjacant vertexen // adjacant vertices
vec3_t v[2]; vec3_t v[2];
find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face, visit[(i + 2) % 6].face, v[0]); find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face,
find_cube_vertex (visit[(i + 1) % 6].face, visit[(i + 2) % 6].face, visit[(i + 3) % 6].face, v[1]); visit[(i + 2) % 6].face, v[0]);
find_cube_vertex (visit[(i + 1) % 6].face, visit[(i + 2) % 6].face,
visit[(i + 3) % 6].face, v[1]);
insert_cube_vertexen (box, visit[(i + 5) % 6], 2, v[2], v[1]); insert_cube_vertices (box, visit[(i + 5) % 6], 2, v[2], v[1]);
insert_cube_vertexen (box, visit[i], 1, v[0]); insert_cube_vertices (box, visit[i], 1, v[0]);
insert_cube_vertexen (box, visit[(i + 1) % 6], 2, v[1], v[0]); insert_cube_vertices (box, visit[(i + 1) % 6], 2, v[1], v[0]);
insert_cube_vertexen (box, visit[(i + 2) % 6], 1, v[1]); insert_cube_vertices (box, visit[(i + 2) % 6], 1, v[1]);
} else { } else {
// opposing vertexen // opposing vertices
vec3_t v[2]; vec3_t v[2];
find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face, visit[(i + 2) % 6].face, v[0]); find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face,
find_cube_vertex (visit[(i + 3) % 6].face, visit[(i + 4) % 6].face, visit[(i + 5) % 6].face, v[1]); visit[(i + 2) % 6].face, v[0]);
find_cube_vertex (visit[(i + 3) % 6].face, visit[(i + 4) % 6].face,
visit[(i + 5) % 6].face, v[1]);
insert_cube_vertexen (box, visit[i], 1, v[0]); insert_cube_vertices (box, visit[i], 1, v[0]);
insert_cube_vertexen (box, visit[(i + 1) % 6], 1, v[0]); insert_cube_vertices (box, visit[(i + 1) % 6], 1, v[0]);
insert_cube_vertexen (box, visit[(i + 3) % 6], 1, v[1]); insert_cube_vertices (box, visit[(i + 3) % 6], 1, v[1]);
insert_cube_vertexen (box, visit[(i + 4) % 6], 1, v[1]); insert_cube_vertices (box, visit[(i + 4) % 6], 1, v[1]);
insert_cube_vertexen (box, visit[(i + 2) % 6], 1, v[1]); insert_cube_vertices (box, visit[(i + 2) % 6], 1, v[1]);
insert_cube_vertexen (box, visit[(i + 5) % 6], 1, v[0]); insert_cube_vertices (box, visit[(i + 5) % 6], 1, v[0]);
} }
break; break;
case 7: case 7:
@ -492,12 +521,14 @@ process_corners (struct box_def *box)
break; break;
} }
{ {
vec3_t v; vec3_t v;
find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face, visit[(i + 2) % 6].face, v);
insert_cube_vertexen (box, visit[i], 1, v); find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face,
insert_cube_vertexen (box, visit[(i + 1) % 7], 1, v); visit[(i + 2) % 6].face, v);
insert_cube_vertexen (box, visit[(i + 6) % 7], 1, v);
insert_cube_vertices (box, visit[i], 1, v);
insert_cube_vertices (box, visit[(i + 1) % 7], 1, v);
insert_cube_vertices (box, visit[(i + 6) % 7], 1, v);
} }
break; break;
} }
@ -506,20 +537,20 @@ process_corners (struct box_def *box)
/* /*
render_box render_box
draws all faces of the cube with 3 or more vertexen. draws all faces of the cube with 3 or more vertices.
*/ */
static void static void
render_box (struct box_def *box) render_box (struct box_def *box)
{ {
int i,j; int i, j;
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
if (box->face[i].poly.numverts <= 2) if (box->face[i].poly.numverts <= 2)
continue; continue;
glBindTexture (GL_TEXTURE_2D, box->face[i].tex); glBindTexture (GL_TEXTURE_2D, box->face[i].tex);
glBegin (GL_POLYGON); glBegin (GL_POLYGON);
for (j=0; j < box->face[i].poly.numverts; j++) { for (j = 0; j < box->face[i].poly.numverts; j++) {
glTexCoord2fv (box->face[i].poly.verts[j]+3); glTexCoord2fv (box->face[i].poly.verts[j] + 3);
glVertex3fv (box->face[i].poly.verts[j]); glVertex3fv (box->face[i].poly.verts[j]);
} }
glEnd (); glEnd ();
@ -529,21 +560,23 @@ render_box (struct box_def *box)
void void
R_DrawSkyBoxPoly (glpoly_t *poly) R_DrawSkyBoxPoly (glpoly_t *poly)
{ {
int i; int i;
struct box_def box; struct box_def box;
/* projected vertex and face of the previous sky poly vertex */ /* projected vertex and face of the previous sky poly vertex */
vec3_t last_v; vec3_t last_v;
int prev_face; int prev_face;
/* projected vertex and face of the current sky poly vertex */ /* projected vertex and face of the current sky poly vertex */
vec3_t v; vec3_t v;
int face; int face;
memset (&box, 0, sizeof (box)); memset (&box, 0, sizeof (box));
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
box.face[i].tex = SKY_TEX + skytex_offs[i]; box.face[i].tex = SKY_TEX + skytex_offs[i];
} }
if (poly->numverts>=32) { if (poly->numverts >= 32) {
Sys_Error ("too many verts!"); Sys_Error ("too many verts!");
} }
@ -553,13 +586,13 @@ R_DrawSkyBoxPoly (glpoly_t *poly)
box.visited_faces[0].face = prev_face; box.visited_faces[0].face = prev_face;
box.face_count = 1; box.face_count = 1;
for (i=0; i< poly->numverts; i++) { for (i = 0; i < poly->numverts; i++) {
VectorSubtract (poly->verts[i], r_refdef.vieworg, v); VectorSubtract (poly->verts[i], r_refdef.vieworg, v);
face = determine_face (v); face = determine_face (v);
if (face != prev_face) { if (face != prev_face) {
if ((face % 3) == (prev_face % 3)) { if ((face % 3) == (prev_face % 3)) {
int x_face; int x_face;
vec3_t x; vec3_t x;
VectorAdd (v, last_v, x); VectorAdd (v, last_v, x);
VectorScale (x, 0.5, x); VectorScale (x, 0.5, x);
@ -571,7 +604,7 @@ R_DrawSkyBoxPoly (glpoly_t *poly)
cross_cube_edge (&box, prev_face, last_v, face, v); cross_cube_edge (&box, prev_face, last_v, face, v);
} }
} }
add_vertex(&box, face, v); add_vertex (&box, face, v);
VectorCopy (v, last_v); VectorCopy (v, last_v);
prev_face = face; prev_face = face;
@ -585,13 +618,13 @@ R_DrawSkyBoxPoly (glpoly_t *poly)
void void
R_DrawSkyDomePoly (glpoly_t *poly) R_DrawSkyDomePoly (glpoly_t *poly)
{ {
int i; int i;
glDisable (GL_BLEND); glDisable (GL_BLEND);
glDisable (GL_TEXTURE_2D); glDisable (GL_TEXTURE_2D);
glColor3f (0, 0, 0); glColor3f (0, 0, 0);
glBegin (GL_POLYGON); glBegin (GL_POLYGON);
for (i=0; i<poly->numverts; i++) { for (i = 0; i < poly->numverts; i++) {
glVertex3fv (poly->verts[i]); glVertex3fv (poly->verts[i]);
} }
glEnd (); glEnd ();
@ -603,10 +636,12 @@ void
R_DrawSkyChain (msurface_t *sky_chain) R_DrawSkyChain (msurface_t *sky_chain)
{ {
msurface_t *sc = sky_chain; msurface_t *sc = sky_chain;
if (skyloaded) { if (skyloaded) {
glDepthRange (gldepthmax, gldepthmax); glDepthRange (gldepthmax, gldepthmax);
while (sc) { while (sc) {
glpoly_t *p = sc->polys; glpoly_t *p = sc->polys;
while (p) { while (p) {
R_DrawSkyBoxPoly (p); R_DrawSkyBoxPoly (p);
p = p->next; p = p->next;
@ -616,7 +651,8 @@ R_DrawSkyChain (msurface_t *sky_chain)
glDepthRange (gldepthmin, gldepthmax); glDepthRange (gldepthmin, gldepthmax);
} else { } else {
while (sc) { while (sc) {
glpoly_t *p = sc->polys; glpoly_t *p = sc->polys;
while (p) { while (p) {
R_DrawSkyDomePoly (p); R_DrawSkyDomePoly (p);
p = p->next; p = p->next;
@ -629,14 +665,16 @@ R_DrawSkyChain (msurface_t *sky_chain)
sc = sky_chain; sc = sky_chain;
glColor3f (1, 1, 1); glColor3f (1, 1, 1);
while (sc) { while (sc) {
glpoly_t *p = sc->polys; glpoly_t *p = sc->polys;
while (p) { while (p) {
int i; int i;
glBegin (GL_LINE_LOOP); glBegin (GL_LINE_LOOP);
for (i=0; i<p->numverts; i++) { for (i = 0; i < p->numverts; i++) {
glVertex3fv (p->verts[i]); glVertex3fv (p->verts[i]);
} }
glEnd(); glEnd ();
p = p->next; p = p->next;
} }
sc = sc->texturechain; sc = sc->texturechain;
@ -645,15 +683,17 @@ R_DrawSkyChain (msurface_t *sky_chain)
glColor3f (0, 1, 0); glColor3f (0, 1, 0);
glBegin (GL_POINTS); glBegin (GL_POINTS);
while (sc) { while (sc) {
glpoly_t *p = sc->polys; glpoly_t *p = sc->polys;
while (p) { while (p) {
int i; int i;
vec3_t x, c = {0, 0, 0}; vec3_t x, c = { 0, 0, 0 };
for (i=0; i<p->numverts; i++) {
for (i = 0; i < p->numverts; i++) {
VectorSubtract (p->verts[i], r_refdef.vieworg, x); VectorSubtract (p->verts[i], r_refdef.vieworg, x);
VectorAdd (x, c, c); VectorAdd (x, c, c);
} }
VectorScale (c, 1.0/p->numverts, c); VectorScale (c, 1.0 / p->numverts, c);
VectorAdd (c, r_refdef.vieworg, c); VectorAdd (c, r_refdef.vieworg, c);
glVertex3fv (c); glVertex3fv (c);
p = p->next; p = p->next;
@ -662,13 +702,15 @@ R_DrawSkyChain (msurface_t *sky_chain)
} }
glEnd (); glEnd ();
if (skyloaded) { if (skyloaded) {
int i,j; int i, j;
glColor3f (1, 0, 0); glColor3f (1, 0, 0);
for (i=0; i<6; i++) { for (i = 0; i < 6; i++) {
vec3_t v; vec3_t v;
glBegin (GL_LINE_LOOP); glBegin (GL_LINE_LOOP);
for (j=0; j<4; j++) { for (j = 0; j < 4; j++) {
memcpy (v, &skyvec[i][j][2], sizeof(v)); memcpy (v, &skyvec[i][j][2], sizeof (v));
VectorAdd (v, r_refdef.vieworg, v); VectorAdd (v, r_refdef.vieworg, v);
glVertex3fv (v); glVertex3fv (v);
} }