/* ================= ReadClipHull Read the files written out by the child processes ================= */ void ReadClipHull (int hullnum) { FILE *f; int i, j, n; int firstclipnode; dplane_t p; dclipnode_t *d; int c1, c2; float f1, f2, f3, f4; int junk; vec3_t norm; hullfilename[strlen(hullfilename)-1] = '0' + hullnum; f = fopen (hullfilename, "r"); if (!f) Error ("Couldn't open %s", hullfilename); if (fscanf (f,"%i\n", &n) != 1) Error ("Error parsing %s", hullfilename); if (n != nummodels) Error ("ReadClipHull: hull had %i models, base had %i", n, nummodels); for (i=0 ; i<n ; i++) { fscanf (f, "%i\n", &j); dmodels[i].headnode[hullnum] = numclipnodes + j; } fscanf (f,"\n%i\n", &n); firstclipnode = numclipnodes; for (i=0 ; i<n ; i++) { if (numclipnodes == MAX_MAP_CLIPNODES) Error ("ReadClipHull: MAX_MAP_CLIPNODES"); d = &dclipnodes[numclipnodes]; numclipnodes++; if (fscanf (f,"%i : %f %f %f %f : %i %i\n", &junk, &f1, &f2, &f3, &f4, &c1, &c2) != 7) Error ("Error parsing %s", hullfilename); p.normal[0] = f1; p.normal[1] = f2; p.normal[2] = f3; p.dist = f4; norm[0] = f1; norm[1] = f2; norm[2] = f3; // vec_t precision p.type = PlaneTypeForNormal (norm); d->children[0] = c1 >= 0 ? c1 + firstclipnode : c1; d->children[1] = c2 >= 0 ? c2 + firstclipnode : c2; d->planenum = FindFinalPlane (&p); } }
static void EmitNodePlanes_r( node_t *node ) { if( node->planenum == PLANENUM_LEAF ) return; if( planemapping[node->planenum] == -1 ) { // a new plane plane_t *plane; plane = &mapplanes[node->planenum]; planemapping[node->planenum] = FindFinalPlane( plane->normal, plane->dist, plane->type ); } node->outputplanenum = planemapping[node->planenum]; EmitNodePlanes_r( node->children[0] ); EmitNodePlanes_r( node->children[1] ); }