mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-30 08:00:51 +00:00
Documentation for tjunc.
This commit is contained in:
parent
f758cacc69
commit
a8bd522ca1
2 changed files with 71 additions and 5 deletions
|
@ -25,6 +25,10 @@
|
|||
|
||||
struct node_s;
|
||||
|
||||
/** Add the edges from the faces in the bsp tree.
|
||||
|
||||
\param headnode The current node in the bsp tree.
|
||||
*/
|
||||
void tjunc (struct node_s *headnode);
|
||||
|
||||
#endif//qfbsp_tjunc_h
|
||||
|
|
|
@ -67,6 +67,11 @@ wedge_t *wedge_hash[NUM_HASH];
|
|||
|
||||
static vec3_t hash_min, hash_scale;
|
||||
|
||||
/** Initialize the edge hash table.
|
||||
|
||||
\param mins The minimum of the bounding box in which the edges reside.
|
||||
\param maxs The maximum of the bounding box in which the edges reside.
|
||||
*/
|
||||
static void
|
||||
InitHash (vec3_t mins, vec3_t maxs)
|
||||
{
|
||||
|
@ -91,6 +96,11 @@ InitHash (vec3_t mins, vec3_t maxs)
|
|||
hash_scale[2] = newsize[1];
|
||||
}
|
||||
|
||||
/** Calulate the hash value of a vector.
|
||||
|
||||
\param vec The vector for which to calculate the hash value.
|
||||
\return The hash value of the vector.
|
||||
*/
|
||||
static unsigned
|
||||
HashVec (vec3_t vec)
|
||||
{
|
||||
|
@ -103,6 +113,14 @@ HashVec (vec3_t vec)
|
|||
return h;
|
||||
}
|
||||
|
||||
/** Make the vector canonical.
|
||||
|
||||
A canonical vector is a unit vector with the first non-zero axis
|
||||
positive.
|
||||
|
||||
\param vec The vector to make canonical.
|
||||
\return false is the vector is (0, 0, 0), otherwise true.
|
||||
*/
|
||||
static qboolean
|
||||
CanonicalVector (vec3_t vec)
|
||||
{
|
||||
|
@ -140,6 +158,21 @@ CanonicalVector (vec3_t vec)
|
|||
return false;
|
||||
}
|
||||
|
||||
/** Find a wedge for the two points.
|
||||
|
||||
A wedge is an infinitely long line passing through the two points with
|
||||
an "origin" at t=0.
|
||||
|
||||
\param p1 The first point.
|
||||
\param p2 The second point.
|
||||
\param t1 The "time" of one of the points.
|
||||
\param t2 The "time" of the other point.
|
||||
\return Pointer to the wedge, or NULL for a degenerate edge
|
||||
(zero length).
|
||||
|
||||
\note t2 will always be greater than t1, so there's no guarantee which
|
||||
point is represented by t1 and t2.
|
||||
*/
|
||||
static wedge_t *
|
||||
FindEdge (vec3_t p1, vec3_t p2, vec_t *t1, vec_t *t2)
|
||||
{
|
||||
|
@ -161,6 +194,7 @@ FindEdge (vec3_t p1, vec3_t p2, vec_t *t1, vec_t *t2)
|
|||
VectorMultSub (p1, *t1, dir, origin);
|
||||
|
||||
if (*t1 > *t2) {
|
||||
// swap t1 and t2
|
||||
temp = *t1;
|
||||
*t1 = *t2;
|
||||
*t2 = temp;
|
||||
|
@ -176,6 +210,7 @@ FindEdge (vec3_t p1, vec3_t p2, vec_t *t1, vec_t *t2)
|
|||
return w;
|
||||
}
|
||||
|
||||
// create a new wedge
|
||||
if (numwedges == MAXWEDGES)
|
||||
Sys_Error ("FindEdge: numwedges == MAXWEDGES");
|
||||
w = &wedges[numwedges];
|
||||
|
@ -193,6 +228,16 @@ FindEdge (vec3_t p1, vec3_t p2, vec_t *t1, vec_t *t2)
|
|||
|
||||
#define T_EPSILON 0.01
|
||||
|
||||
/** Add a wvert to the wedge.
|
||||
|
||||
A wvert is a vertex on the wedge and is specified by the time along the
|
||||
wedge from the wedge's origin.
|
||||
|
||||
If a wvert with the same time already exists, a new one will not be added.
|
||||
|
||||
\param w The wedge to which the wvert will be added.
|
||||
\param t The "time" of the wvert.
|
||||
*/
|
||||
static void
|
||||
AddVert (wedge_t *w, vec_t t)
|
||||
{
|
||||
|
@ -221,6 +266,11 @@ AddVert (wedge_t *w, vec_t t)
|
|||
v->prev = newv;
|
||||
}
|
||||
|
||||
/** Add a faces edge to the wedge system.
|
||||
|
||||
\param p1 The first point of the face's edge.
|
||||
\param p2 The second point of the face's edge.
|
||||
*/
|
||||
static void
|
||||
AddEdge (vec3_t p1, vec3_t p2)
|
||||
{
|
||||
|
@ -233,6 +283,10 @@ AddEdge (vec3_t p1, vec3_t p2)
|
|||
}
|
||||
}
|
||||
|
||||
/** Add the edges from the face.
|
||||
|
||||
\param f The face from which to add the faces.
|
||||
*/
|
||||
static void
|
||||
AddFaceEdges (face_t *f)
|
||||
{
|
||||
|
@ -246,6 +300,13 @@ AddFaceEdges (face_t *f)
|
|||
|
||||
face_t *newlist;
|
||||
|
||||
/** Check and fix the edges of the face.
|
||||
|
||||
If any vertices from other faces lie on an edge of the face between the
|
||||
edge's end points, add matching vertices along that edge.
|
||||
|
||||
\param f The face of which the edges will be checked.
|
||||
*/
|
||||
static void
|
||||
FixFaceEdges (face_t *f)
|
||||
{
|
||||
|
@ -284,8 +345,6 @@ FixFaceEdges (face_t *f)
|
|||
newlist = f;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
static void
|
||||
tjunc_find_r (node_t *node)
|
||||
{
|
||||
|
@ -302,6 +361,10 @@ tjunc_find_r (node_t *node)
|
|||
tjunc_find_r (node->children[1]);
|
||||
}
|
||||
|
||||
/** Check and fix the edges from the faces in the bsp tree.
|
||||
|
||||
\param node The current node in the bsp tree.
|
||||
*/
|
||||
static void
|
||||
tjunc_fix_r (node_t *node)
|
||||
{
|
||||
|
@ -336,8 +399,6 @@ tjunc (node_t *headnode)
|
|||
if (options.notjunc)
|
||||
return;
|
||||
|
||||
// identify all points on common edges
|
||||
|
||||
// origin points won't allways be inside the map, so extend the hash area
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (fabs (brushset->maxs[i]) > fabs (brushset->mins[i]))
|
||||
|
@ -351,6 +412,7 @@ tjunc (node_t *headnode)
|
|||
|
||||
numwedges = numwverts = 0;
|
||||
|
||||
// identify all points on common edges
|
||||
tjunc_find_r (headnode);
|
||||
|
||||
qprintf ("%i world edges %i edge points\n", numwedges, numwverts);
|
||||
|
|
Loading…
Reference in a new issue