mirror of
https://git.code.sf.net/p/quake/newtree
synced 2024-11-25 13:32:01 +00:00
pass though indent, correct a comment and change vertexen to vertices
This commit is contained in:
parent
c90adba9dc
commit
bd47fcf241
1 changed files with 186 additions and 144 deletions
|
@ -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));
|
||||
|
|
Loading…
Reference in a new issue