26 #ifdef TRI_COLLISION_PROFILING 
   30 float g_accum_tree_collision_time = 0;
 
   31 int g_count_traversing = 0;
 
   33 void bt_begin_gim02_tree_time()
 
   38 void bt_end_gim02_tree_time()
 
   45 float btGImpactBvh::getAverageTreeCollisionTime()
 
   47         if (g_count_traversing == 0) 
return 0;
 
   49         float avgtime = g_accum_tree_collision_time;
 
   50         avgtime /= (float)g_count_traversing;
 
   52         g_accum_tree_collision_time = 0;
 
   53         g_count_traversing = 0;
 
   61 #endif  //TRI_COLLISION_PROFILING 
   72         int numIndices = endIndex - startIndex;
 
   74         for (i = startIndex; i < endIndex; i++)
 
   77                                                                                         primitive_boxes[i].m_bound.m_min);
 
   82         for (i = startIndex; i < endIndex; i++)
 
   85                                                                                         primitive_boxes[i].m_bound.m_min);
 
   87                 diff2 = diff2 * diff2;
 
   97         int endIndex, 
int splitAxis)
 
  100         int splitIndex = startIndex;
 
  101         int numIndices = endIndex - startIndex;
 
  107         for (i = startIndex; i < endIndex; i++)
 
  110                                                                                         primitive_boxes[i].m_bound.m_min);
 
  115         splitValue = means[splitAxis];
 
  118         for (i = startIndex; i < endIndex; i++)
 
  121                                                                                         primitive_boxes[i].m_bound.m_min);
 
  122                 if (center[splitAxis] > splitValue)
 
  125                         primitive_boxes.
swap(i, splitIndex);
 
  140         int rangeBalancedIndices = numIndices / 3;
 
  141         bool unbalanced = ((splitIndex <= (startIndex + rangeBalancedIndices)) || (splitIndex >= (endIndex - 1 - rangeBalancedIndices)));
 
  145                 splitIndex = startIndex + (numIndices >> 1);
 
  148         btAssert(!((splitIndex == startIndex) || (splitIndex == (endIndex))));
 
  158         btAssert((endIndex - startIndex) > 0);
 
  160         if ((endIndex - startIndex) == 1)
 
  163                 setNodeBound(curIndex, primitive_boxes[startIndex].m_bound);
 
  164                 m_node_array[curIndex].setDataIndex(primitive_boxes[startIndex].m_data);
 
  174                 primitive_boxes, startIndex, endIndex,
 
  183         for (
int i = startIndex; i < endIndex; i++)
 
  185                 node_bound.
merge(primitive_boxes[i].m_bound);
 
  237                                 bound.
merge(temp_box);
 
  244                                 bound.
merge(temp_box);
 
  259         for (
int i = 0; i < primitive_boxes.
size(); i++)
 
  262                 primitive_boxes[i].
m_data = i;
 
  274         while (curIndex < numNodes)
 
  284                 if (isleafnode && aabbOverlap)
 
  289                 if (aabbOverlap || isleafnode)
 
  300         if (collided_results.
size() > 0) 
return true;
 
  312         while (curIndex < numNodes)
 
  319                 bool aabbOverlap = bound.
collide_ray(ray_origin, ray_dir);
 
  322                 if (isleafnode && aabbOverlap)
 
  327                 if (aabbOverlap || isleafnode)
 
  338         if (collided_results.
size() > 0) 
return true;
 
  345         int node0, 
int node1, 
bool complete_primitive_tests)
 
  362         int node0, 
int node1, 
bool complete_primitive_tests)
 
  365                         boxset0, boxset1, trans_cache_1to0,
 
  366                         node0, node1, complete_primitive_tests) == 
false) 
return;  
 
  383                                 collision_pairs, trans_cache_1to0,
 
  389                                 collision_pairs, trans_cache_1to0,
 
  400                                 collision_pairs, trans_cache_1to0,
 
  407                                 collision_pairs, trans_cache_1to0,
 
  416                                 collision_pairs, trans_cache_1to0,
 
  423                                 collision_pairs, trans_cache_1to0,
 
  430                                 collision_pairs, trans_cache_1to0,
 
  437                                 collision_pairs, trans_cache_1to0,
 
  454 #ifdef TRI_COLLISION_PROFILING 
  455         bt_begin_gim02_tree_time();
 
  456 #endif  //TRI_COLLISION_PROFILING 
  460                 &collision_pairs, trans_cache_1to0, 0, 0, 
true);
 
  461 #ifdef TRI_COLLISION_PROFILING 
  462         bt_end_gim02_tree_time();
 
  463 #endif  //TRI_COLLISION_PROFILING