Beispiel #1
0
/*
==============
GrowNodeRegion_r
==============
*/
void GrowNodeRegion_r (node_t *node)
{
  dface_t		*r;
  face_t		*f;
  int			i;

  if (node->planenum == PLANENUM_LEAF)
    return;

  node->firstface = numfaces;

  for (f=node->faces ; f ; f=f->next)
    {
      //		if (f->outputnumber != -1)
      //			continue;	// allready grown into an earlier region
			
      // emit a region

      if (numfaces == MAX_MAP_FACES)
	Error ("MAX_MAP_FACES");
      f->outputnumber = numfaces;
      r = &dfaces[numfaces];

      r->planenum = node->outputplanenum;
      r->side = f->planeside;
      r->texinfo = f->texturenum;
      for (i=0 ; i<MAXLIGHTMAPS ; i++)
	r->styles[i] = 255;
      r->lightofs = -1;

      // add the face and mergable neighbors to it
	
#if 0
      ClearRegionSize ();
      AddFaceToRegionSize (f);
      RecursiveGrowRegion (r, f);
#endif
      r->firstedge = firstedge = numsurfedges;
      for (i=0 ; i<f->numpoints ; i++)
	{
	  if (numsurfedges == MAX_MAP_SURFEDGES)
	    Error ("numsurfedges == MAX_MAP_SURFEDGES");
	  dsurfedges[numsurfedges] = f->edges[i];
	  numsurfedges++;
	}
		
      r->numedges = numsurfedges - r->firstedge;

      numfaces++;
    }

  node->numfaces = numfaces - node->firstface;

  GrowNodeRegion_r (node->children[0]);
  GrowNodeRegion_r (node->children[1]);
}
Beispiel #2
0
static void
GrowNodeRegion_r (node_t * node)
{
	dface_t     r;
	face_t     *f;
	int         i;

	if (node->planenum == PLANENUM_LEAF)
		return;

	node->firstface = bsp->numfaces;

	for (f = node->faces; f; f = f->next) {
		if (f->texturenum < 0)
			continue;

//		if (f->outputnumber != -1)
//			continue;		// allready grown into an earlier region

		// emit a region
		if (bsp->numfaces == MAX_MAP_FACES)
			Sys_Error ("MAX_MAP_FACES");
		f->outputnumber = bsp->numfaces;

		r.planenum = node->outputplanenum;
		r.side = f->planeside;
		r.texinfo = f->texturenum;
		for (i = 0; i < MAXLIGHTMAPS; i++)
			r.styles[i] = 255;
		r.lightofs = -1;

		// add the face and mergable neighbors to it
#if 0
		ClearRegionSize ();
		AddFaceToRegionSize (f);
		RecursiveGrowRegion (r, f);
#endif
		r.firstedge = firstedge = bsp->numsurfedges;
		for (i = 0; i < f->points->numpoints; i++) {
			BSP_AddSurfEdge (bsp, f->edges[i]);
		}

		r.numedges = bsp->numsurfedges - r.firstedge;

		BSP_AddFace (bsp, &r);
	}

	node->numfaces = bsp->numfaces - node->firstface;

	GrowNodeRegion_r (node->children[0]);
	GrowNodeRegion_r (node->children[1]);
}