コード例 #1
0
ファイル: r_bsp.c プロジェクト: shovelmachine/hexentouch
void R_RenderBSPNode (int bspnum)
{
	node_t          *bsp;
	int                     side;

	if (bspnum & NF_SUBSECTOR)
	{
		if (bspnum == -1)
			R_Subsector (0);
		else
			R_Subsector (bspnum&(~NF_SUBSECTOR));
		return;
	}

	bsp = &nodes[bspnum];

#ifdef __NeXT__
	RD_DrawNodeLine (bsp);
#endif

//
// decide which side the view point is on
//
	side = R_PointOnSide (viewx, viewy, bsp);

	R_RenderBSPNode (bsp->children[side]); // recursively divide front space

	if (R_CheckBBox (bsp->bbox[side^1]))    // possibly divide back space
		R_RenderBSPNode (bsp->children[side^1]);
}
コード例 #2
0
ファイル: r_bsp.c プロジェクト: Fellowzdoomer/crispy-doom
//
// RenderBSPNode
// Renders all subsectors below a given node,
//  traversing subtree recursively.
// Just call with BSP root.
void R_RenderBSPNode (int bspnum)
{
    node_t*	bsp;
    int		side;

    // Found a subsector?
    if (bspnum & NF_SUBSECTOR)
    {
	if (bspnum == -1)			
	    R_Subsector (0);
	else
	    R_Subsector (bspnum&(~NF_SUBSECTOR));
	return;
    }
		
    bsp = &nodes[bspnum];
    
    // Decide which side the view point is on.
    side = R_PointOnSide (viewx, viewy, bsp);

    // Recursively divide front space.
    R_RenderBSPNode (bsp->children[side]); 

    // Possibly divide back space.
    if (R_CheckBBox (bsp->bbox[side^1]))	
	R_RenderBSPNode (bsp->children[side^1]);
}
コード例 #3
0
ファイル: r_bsp.cpp プロジェクト: FlameNeon/gzdoom
void R_RenderBSPNode (void *node)
{
	if (numnodes == 0)
	{
		R_Subsector (subsectors);
		return;
	}
	while (!((size_t)node & 1))  // Keep going until found a subsector
	{
		node_t *bsp = (node_t *)node;

		// Decide which side the view point is on.
		int side = R_PointOnSide (ViewPos, bsp);

		// Recursively divide front space (toward the viewer).
		R_RenderBSPNode (bsp->children[side]);

		// Possibly divide back space (away from the viewer).
		side ^= 1;
		if (!R_CheckBBox (bsp->bbox[side]))
			return;

		node = bsp->children[side];
	}
	R_Subsector ((subsector_t *)((BYTE *)node - 1));
}
コード例 #4
0
ファイル: r_bsp.cpp プロジェクト: Clever-Boy/DOOM-Vis
//
// RenderBSPNode
// Renders all subsectors below a given node,
//  traversing subtree recursively.
// Just call with BSP root.
void R_RenderBSPNode(int bspnum, vector<BspNodeInfo>& nodeInfo, vector<SegInfo>& segInfo, int parentIdx, bool nodeFront)
{
	node_t*	bsp;
	int		side;

	// Found a subsector?
	if (bspnum & NF_SUBSECTOR)
	{
		int subsectorNum = (bspnum == -1) ? 0 : bspnum&(~NF_SUBSECTOR);
		R_Subsector(subsectorNum, segInfo, parentIdx);
		return;
	}

	bsp = &nodes[bspnum];

	int curIdx = nodeInfo.size();
	nodeInfo.emplace_back();
	{
		BspNodeInfo& curNodeInfo = nodeInfo.back();
		//Ref could be invalid after recursion below.

		curNodeInfo.node = *bsp;
		curNodeInfo.parent = parentIdx;

		curNodeInfo.frontChild = curNodeInfo.backChild = -1;
		curNodeInfo.twoSide = false;
	}

	if (parentIdx != -1)
	{
		BspNodeInfo& parent = nodeInfo[parentIdx];
		if (nodeFront)
		{
			parent.frontChild = curIdx;
		}
		else
		{
			parent.backChild = curIdx;
		}
	}

	// Decide which side the view point is on.
	side = R_PointOnSide(viewx, viewy, bsp);

	// Recursively divide front space.
	R_RenderBSPNode(bsp->children[side], nodeInfo, segInfo, curIdx, true);

	// Possibly divide back space.
	if (R_CheckBBox(bsp->bbox[side ^ 1]))
	{
		R_RenderBSPNode(bsp->children[side ^ 1], nodeInfo, segInfo, curIdx, false);
		nodeInfo[curIdx].twoSide = true;
	}
}
コード例 #5
0
ファイル: r_bsp.cpp プロジェクト: FlameNeon/gzdoom
static void R_AddPolyobjs(subsector_t *sub)
{
	if (sub->BSP == NULL || sub->BSP->bDirty)
	{
		sub->BuildPolyBSP();
	}
	if (sub->BSP->Nodes.Size() == 0)
	{
		R_Subsector(&sub->BSP->Subsectors[0]);
	}
	else
	{
		R_RenderBSPNode(&sub->BSP->Nodes.Last());
	}
}
コード例 #6
0
ファイル: r_bsp.c プロジェクト: CatalystG/libretro-prboom
void R_RenderBSPNode(int bspnum)
{
  while (!(bspnum & NF_SUBSECTOR))  // Found a subsector?
    {
      const node_t *bsp = &nodes[bspnum];

      // Decide which side the view point is on.
      int side = R_PointOnSide(viewx, viewy, bsp);
      // Recursively divide front space.
      R_RenderBSPNode(bsp->children[side]);

      // Possibly divide back space.

      if (!R_CheckBBox(bsp->bbox[side^1]))
        return;

      bspnum = bsp->children[side^1];
    }
  R_Subsector(bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR);
}
コード例 #7
0
ファイル: r_bsp.c プロジェクト: jezze/doom
void R_RenderBSPNode(int bspnum)
{

    while (!(bspnum & NF_SUBSECTOR))
    {

        const node_t *bsp = &nodes[bspnum];
        int side = R_PointOnSide(viewx, viewy, bsp);

        R_RenderBSPNode(bsp->children[side]);

        if (!R_CheckBBox(bsp->bbox[side ^ 1]))
            return;

        bspnum = bsp->children[side ^ 1];

    }

    R_Subsector(bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR);

}