From: havoc Date: Wed, 26 Oct 2005 02:02:49 +0000 (+0000) Subject: reverted bsp recursion changes (back to the BoxOnPlaneSide method) because the skippi... X-Git-Tag: xonotic-v0.1.0preview~4516 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=932c429ab8712415816894e4fc217ba6cbf3ee51;p=xonotic%2Fdarkplaces.git reverted bsp recursion changes (back to the BoxOnPlaneSide method) because the skipping of solid leafs in node bounding box generation was completely breaking q3bsp collisions, and without the reduced node boxes the bsp recursion code runs horribly slow for unknown reasons git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5768 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/model_brush.c b/model_brush.c index f4594956..44512720 100644 --- a/model_brush.c +++ b/model_brush.c @@ -112,7 +112,7 @@ static int Mod_Q1BSP_FindBoxClusters(model_t *model, const vec3_t mins, const ve node = model->brush.data_nodes; for (;;) { -#if 0 +#if 1 if (node->plane) { // node - recurse down the BSP tree @@ -175,7 +175,7 @@ static int Mod_Q1BSP_BoxTouchingPVS(model_t *model, const qbyte *pvs, const vec3 node = model->brush.data_nodes; for (;;) { -#if 0 +#if 1 if (node->plane) { // node - recurse down the BSP tree @@ -244,7 +244,7 @@ static int Mod_Q1BSP_BoxTouchingLeafPVS(model_t *model, const qbyte *pvs, const node = model->brush.data_nodes; for (;;) { -#if 0 +#if 1 if (node->plane) { // node - recurse down the BSP tree @@ -313,7 +313,7 @@ static int Mod_Q1BSP_BoxTouchingVisibleLeafs(model_t *model, const qbyte *visibl node = model->brush.data_nodes; for (;;) { -#if 0 +#if 1 if (node->plane) { // node - recurse down the BSP tree @@ -2536,57 +2536,12 @@ static void Mod_Q1BSP_RecursiveRecalcNodeBBox(mnode_t *node) Mod_Q1BSP_RecursiveRecalcNodeBBox(node->children[1]); // make combined bounding box from children - if (node->plane) - { - node->mins[0] = min(node->children[0]->mins[0], node->children[1]->mins[0]); - node->mins[1] = min(node->children[0]->mins[1], node->children[1]->mins[1]); - node->mins[2] = min(node->children[0]->mins[2], node->children[1]->mins[2]); - node->maxs[0] = max(node->children[0]->maxs[0], node->children[1]->maxs[0]); - node->maxs[1] = max(node->children[0]->maxs[1], node->children[1]->maxs[1]); - node->maxs[2] = max(node->children[0]->maxs[2], node->children[1]->maxs[2]); - } - else if (((mleaf_t *)node->children[0])->clusterindex >= 0) - { - if (((mleaf_t *)node->children[1])->clusterindex >= 0) - { - node->mins[0] = min(node->children[0]->mins[0], node->children[1]->mins[0]); - node->mins[1] = min(node->children[0]->mins[1], node->children[1]->mins[1]); - node->mins[2] = min(node->children[0]->mins[2], node->children[1]->mins[2]); - node->maxs[0] = max(node->children[0]->maxs[0], node->children[1]->maxs[0]); - node->maxs[1] = max(node->children[0]->maxs[1], node->children[1]->maxs[1]); - node->maxs[2] = max(node->children[0]->maxs[2], node->children[1]->maxs[2]); - } - else - { - node->mins[0] = node->children[0]->mins[0]; - node->mins[1] = node->children[0]->mins[1]; - node->mins[2] = node->children[0]->mins[2]; - node->maxs[0] = node->children[0]->maxs[0]; - node->maxs[1] = node->children[0]->maxs[1]; - node->maxs[2] = node->children[0]->maxs[2]; - } - } - else - { - if (((mleaf_t *)node->children[1])->clusterindex >= 0) - { - node->mins[0] = node->children[1]->mins[0]; - node->mins[1] = node->children[1]->mins[1]; - node->mins[2] = node->children[1]->mins[2]; - node->maxs[0] = node->children[1]->maxs[0]; - node->maxs[1] = node->children[1]->maxs[1]; - node->maxs[2] = node->children[1]->maxs[2]; - } - else - { - node->mins[0] = 2000000000; - node->mins[1] = 2000000000; - node->mins[2] = 2000000000; - node->maxs[0] = -2000000000; - node->maxs[1] = -2000000000; - node->maxs[2] = -2000000000; - } - } + node->mins[0] = min(node->children[0]->mins[0], node->children[1]->mins[0]); + node->mins[1] = min(node->children[0]->mins[1], node->children[1]->mins[1]); + node->mins[2] = min(node->children[0]->mins[2], node->children[1]->mins[2]); + node->maxs[0] = max(node->children[0]->maxs[0], node->children[1]->maxs[0]); + node->maxs[1] = max(node->children[0]->maxs[1], node->children[1]->maxs[1]); + node->maxs[2] = max(node->children[0]->maxs[2], node->children[1]->maxs[2]); } static void Mod_Q1BSP_FinalizePortals(void) @@ -2692,17 +2647,14 @@ static void Mod_Q1BSP_FinalizePortals(void) for (i = 0;i < 2;i++) { leaf = (mleaf_t *)p->nodes[i]; - if (leaf->clusterindex >= 0) + for (j = 0;j < p->numpoints;j++) { - for (j = 0;j < p->numpoints;j++) - { - if (leaf->mins[0] > p->points[j*3+0]) leaf->mins[0] = p->points[j*3+0]; - if (leaf->mins[1] > p->points[j*3+1]) leaf->mins[1] = p->points[j*3+1]; - if (leaf->mins[2] > p->points[j*3+2]) leaf->mins[2] = p->points[j*3+2]; - if (leaf->maxs[0] < p->points[j*3+0]) leaf->maxs[0] = p->points[j*3+0]; - if (leaf->maxs[1] < p->points[j*3+1]) leaf->maxs[1] = p->points[j*3+1]; - if (leaf->maxs[2] < p->points[j*3+2]) leaf->maxs[2] = p->points[j*3+2]; - } + if (leaf->mins[0] > p->points[j*3+0]) leaf->mins[0] = p->points[j*3+0]; + if (leaf->mins[1] > p->points[j*3+1]) leaf->mins[1] = p->points[j*3+1]; + if (leaf->mins[2] > p->points[j*3+2]) leaf->mins[2] = p->points[j*3+2]; + if (leaf->maxs[0] < p->points[j*3+0]) leaf->maxs[0] = p->points[j*3+0]; + if (leaf->maxs[1] < p->points[j*3+1]) leaf->maxs[1] = p->points[j*3+1]; + if (leaf->maxs[2] < p->points[j*3+2]) leaf->maxs[2] = p->points[j*3+2]; } } }