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

@ -42,6 +42,7 @@ extern vec5_t skyvec[6][4];
/* cube face to sky texture offset conversion */
static const int skytex_offs[] = { 3, 0, 4, 1, 2, 5 };
/* clockwise loop through the cube faces adjoining the current face */
static const int face_loop[6][5] = {
{1, 2, 4, 5, 1},
@ -51,16 +52,20 @@ static const int face_loop[6][5] = {
{0, 2, 3, 5, 0},
{0, 4, 3, 1, 0},
};
/* convert axis and face distance into face */
static const int faces_table[3][6] = {
{-1, 0, 0, -1, 3, 3},
{-1, 4, 4, -1, 1, 1},
{-1, 2, 2, -1, 5, 5},
};
/* convert face magic bit mask to index into visit array */
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) */
static const int face_axis[] = { 0, 1, 2, 0, 1, 2 };
/* offset on the axis the cube face cuts */
static const vec_t face_offset[] = { 1024, 1024, 1024, -1024, -1024, -1024 };
@ -152,11 +157,15 @@ determine_face (vec3_t v)
static int
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
// 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 v = {0, 0, 0}; // direction vector of cube edge. always +ve
vec3_t n; // normal to the plane formed by the
// 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 v = { 0, 0, 0 }; // direction vector of cube edge.
// always +ve
vec_t x_n, v_n; // x.n and v.n
int axis;
vec3_t t;
@ -247,13 +256,14 @@ 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.
*/
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;
vec3_t **v;
@ -263,6 +273,7 @@ insert_cube_vertexen (struct box_def *box, struct visit_def visit, int count, ..
va_start (args, count);
v = (vec3_t **) alloca (count * sizeof (vec3_t *));
for (i = 0; i < count; i++) {
v[i] = va_arg (args, vec3_t *);
}
@ -271,15 +282,16 @@ insert_cube_vertexen (struct box_def *box, struct visit_def visit, int count, ..
if (ind == box->face[face].poly.numverts) {
// the vertex the sky poly left this cube fase through is very
// 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++)
add_vertex (box, face, *v[i]);
} 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
glpoly_t *p = &box->face[face].poly;
int c = p->numverts - ind;
const int vert_size = sizeof (p->verts[0]);
memmove (p->verts[ind + count], p->verts[ind], c * vert_size);
p->numverts += count;
for (i = 0; i < count; i++)
@ -310,12 +322,14 @@ cross_cube_edge (struct box_def *box, int face1, vec3_t v1, int face2,
face = axis + 3;
if (face > 0) {
vec3_t x;
VectorAdd (v1, v2, x);
VectorScale (x, 0.5, x);
cross_cube_edge (box, face1, v1, face, x);
cross_cube_edge (box, face, x, face2, v2);
} else {
struct visit_def *visit = box->visited_faces;
visit[box->face_count - 1].leave = box->face[face1].poly.numverts;
visit[box->face_count].face = face2;
box->face_count++;
@ -360,10 +374,11 @@ process_corners (struct box_def *box)
// one corner, no edges
{
vec3_t v;
find_cube_vertex (visit[0].face, visit[1].face, visit[2].face, v);
insert_cube_vertexen (box, visit[0], 1, v);
insert_cube_vertexen (box, visit[1], 1, v);
insert_cube_vertexen (box, visit[2], 1, v);
insert_cube_vertices (box, visit[0], 1, v);
insert_cube_vertices (box, visit[1], 1, v);
insert_cube_vertices (box, visit[2], 1, v);
}
break;
case 4:
@ -371,7 +386,7 @@ process_corners (struct box_def *box)
return;
if (abs (visit[2].face - visit[0].face) == 3
&& abs (visit[3].face - visit[1].face) == 3) {
// 4 vertexen
// 4 vertices
int sum, diff;
vec3_t v[4];
@ -382,13 +397,14 @@ process_corners (struct box_def *box)
center = faces_table[sum][diff];
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]);
}
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 {
// 2 vertexen
// 2 vertices
int l_f, t_f, r_f, b_f;
vec3_t v_l, v_r;
@ -405,45 +421,54 @@ process_corners (struct box_def *box)
} else {
return;
}
find_cube_vertex (visit[l_f].face, visit[t_f].face, visit[b_f].face, v_l);
find_cube_vertex (visit[r_f].face, visit[t_f].face, visit[b_f].face, v_r);
find_cube_vertex (visit[l_f].face, visit[t_f].face, visit[b_f].face,
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_vertexen (box, visit[b_f], 2, v_l, v_r);
insert_cube_vertices (box, visit[t_f], 2, v_r, v_l);
insert_cube_vertices (box, visit[b_f], 2, v_l, v_r);
insert_cube_vertexen (box, visit[l_f], 1, v_l);
insert_cube_vertexen (box, visit[r_f], 1, v_r);
insert_cube_vertices (box, visit[l_f], 1, v_l);
insert_cube_vertices (box, visit[r_f], 1, v_r);
}
break;
case 5:
if (max_visit > 1) {
// one vertex
vec3_t v;
for (i = 0; i < 4; i++) {
// don't need to check the 5th visit
if (visit[(i + 2) % 5].face == visit[(i + 4) % 5].face)
break;
}
find_cube_vertex (visit[i].face, visit[(i + 1) % 5].face, visit[(i + 2) % 5].face, v);
insert_cube_vertexen (box, visit[i], 1, v);
insert_cube_vertexen (box, visit[(i + 1) % 5], 1, v);
insert_cube_vertexen (box, visit[(i + 4) % 5], 1, v);
find_cube_vertex (visit[i].face, visit[(i + 1) % 5].face,
visit[(i + 2) % 5].face, v);
insert_cube_vertices (box, visit[i], 1, v);
insert_cube_vertices (box, visit[(i + 1) % 5], 1, v);
insert_cube_vertices (box, visit[(i + 4) % 5], 1, v);
} else {
// 3 vertexen
unsigned int sel = (((abs (visit[2].face - visit[0].face) == 3) << 2)
| ((abs (visit[3].face - visit[1].face) == 3) << 1)
// 3 vertices
unsigned int sel =
(((abs (visit[2].face - visit[0].face) == 3) << 2) |
((abs (visit[3].face - visit[1].face) == 3) << 1)
| ((abs (visit[4].face - visit[2].face) == 3) << 0));
vec3_t v[3];
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++)
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 + 1) % 5], 1, v[0]);
insert_cube_vertexen (box, visit[(center + 2) % 5], 2, v[1], v[0]);
insert_cube_vertexen (box, visit[(center + 3) % 5], 2, v[2], v[1]);
insert_cube_vertexen (box, visit[(center + 4) % 5], 1, v[2]);
find_cube_vertex (visit[center].face,
visit[(center + 1 + i) % 5].face,
visit[(center + 2 + i) % 5].face, v[i]);
insert_cube_vertices (box, visit[center], 3, v[0], v[1], v[2]);
insert_cube_vertices (box, visit[(center + 1) % 5], 1, v[0]);
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;
case 6:
@ -456,32 +481,36 @@ process_corners (struct box_def *box)
break;
}
if (visit[(i + 3) % 6].face == visit[(i + 5) % 6].face) {
// adjacant vertexen
// adjacant vertices
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 + 1) % 6].face, visit[(i + 2) % 6].face, visit[(i + 3) % 6].face, v[1]);
find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face,
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_vertexen (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], 1, v[0]);
insert_cube_vertices (box, visit[(i + 1) % 6], 2, v[1], v[0]);
insert_cube_vertices (box, visit[(i + 2) % 6], 1, v[1]);
} else {
// opposing vertexen
// opposing vertices
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 + 3) % 6].face, visit[(i + 4) % 6].face, visit[(i + 5) % 6].face, v[1]);
find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face,
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_vertexen (box, visit[(i + 1) % 6], 1, v[0]);
insert_cube_vertices (box, visit[i], 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_vertexen (box, visit[(i + 4) % 6], 1, v[1]);
insert_cube_vertices (box, visit[(i + 3) % 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_vertexen (box, visit[(i + 5) % 6], 1, v[0]);
insert_cube_vertices (box, visit[(i + 2) % 6], 1, v[1]);
insert_cube_vertices (box, visit[(i + 5) % 6], 1, v[0]);
}
break;
case 7:
@ -493,11 +522,13 @@ process_corners (struct box_def *box)
}
{
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);
insert_cube_vertexen (box, visit[(i + 1) % 7], 1, v);
insert_cube_vertexen (box, visit[(i + 6) % 7], 1, v);
find_cube_vertex (visit[i].face, visit[(i + 1) % 6].face,
visit[(i + 2) % 6].face, 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;
}
@ -506,7 +537,7 @@ process_corners (struct box_def *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
render_box (struct box_def *box)
@ -531,9 +562,11 @@ R_DrawSkyBoxPoly (glpoly_t *poly)
{
int i;
struct box_def box;
/* projected vertex and face of the previous sky poly vertex */
vec3_t last_v;
int prev_face;
/* projected vertex and face of the current sky poly vertex */
vec3_t v;
int face;
@ -603,10 +636,12 @@ void
R_DrawSkyChain (msurface_t *sky_chain)
{
msurface_t *sc = sky_chain;
if (skyloaded) {
glDepthRange (gldepthmax, gldepthmax);
while (sc) {
glpoly_t *p = sc->polys;
while (p) {
R_DrawSkyBoxPoly (p);
p = p->next;
@ -617,6 +652,7 @@ R_DrawSkyChain (msurface_t *sky_chain)
} else {
while (sc) {
glpoly_t *p = sc->polys;
while (p) {
R_DrawSkyDomePoly (p);
p = p->next;
@ -630,8 +666,10 @@ R_DrawSkyChain (msurface_t *sky_chain)
glColor3f (1, 1, 1);
while (sc) {
glpoly_t *p = sc->polys;
while (p) {
int i;
glBegin (GL_LINE_LOOP);
for (i = 0; i < p->numverts; i++) {
glVertex3fv (p->verts[i]);
@ -646,9 +684,11 @@ R_DrawSkyChain (msurface_t *sky_chain)
glBegin (GL_POINTS);
while (sc) {
glpoly_t *p = sc->polys;
while (p) {
int i;
vec3_t x, c = { 0, 0, 0 };
for (i = 0; i < p->numverts; i++) {
VectorSubtract (p->verts[i], r_refdef.vieworg, x);
VectorAdd (x, c, c);
@ -663,9 +703,11 @@ R_DrawSkyChain (msurface_t *sky_chain)
glEnd ();
if (skyloaded) {
int i, j;
glColor3f (1, 0, 0);
for (i = 0; i < 6; i++) {
vec3_t v;
glBegin (GL_LINE_LOOP);
for (j = 0; j < 4; j++) {
memcpy (v, &skyvec[i][j][2], sizeof (v));