Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 19, 2005, 9:59:28 PM (20 years ago)
Author:
patrick
Message:

orxonox/trunk: again some very fundamental changes in the tree spawing algorithm. some strange effects left

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/graphics/spatial_separation/quadtree_node.cc

    r4897 r4898  
    3030                            const float* pVertices, int numVertices,
    3131                            Quadtree* quadtree, QuadtreeNode* parent,
    32                             Rectangle* rect
     32                            Rectangle* rect, int treeDepth, const int maxDepth
    3333                           )
    3434{
     
    4141  this->parent = parent;
    4242  this->pDimension = rect;
     43  this->treeDepth = treeDepth;
     44  this->maxDepth = maxDepth;
     45
     46
     47  /* debug output */
     48  for( int i = 0; i < this->treeDepth; ++i)
     49    PRINT(3)(" |");
     50  PRINT(3)(" | +-| (Event) Separating Node Depth: %i/%i\n", treeDepth, maxDepth);
     51
     52  for( int i = 0; i < this->treeDepth; ++i)
     53    PRINT(3)(" |");
     54  PRINT(3)(" | +-| (II) Rectangle Center (%5.2f, %5.2f), half axis length: %5.2f\n",
     55  this->pDimension->getCenter()->x, this->pDimension->getCenter()->z, this->pDimension->getAxis());
    4356
    4457  this->init();
     
    4962 *  standard constructor
    5063 */
    51 QuadtreeNode::QuadtreeNode(modelInfo* pModelInfo)
     64QuadtreeNode::QuadtreeNode(modelInfo* pModelInfo, const int maxDepth)
    5265{
    5366  this->pModelInfo = pModelInfo;
     
    6174    this->pTriangles[i] = &this->pModelInfo->pTriangles[i];
    6275  this->treeDepth = 0;
     76  this->maxDepth = maxDepth;
     77
     78  /* debug output */
     79  for( int i = 0; i < this->treeDepth; ++i)
     80    PRINT(3)(" |");
     81  PRINT(3)(" | +-| (Event) Separating Node Depth: %i/%i\n", treeDepth, maxDepth);
    6382
    6483  this->pDimension = this->getDimFromModel();
     
    8099  this->nodeC = NULL;
    81100  this->nodeD = NULL;
     101
     102  this->separateNode(this->treeDepth, this->maxDepth);
    82103}
    83104
     
    105126void QuadtreeNode::separateNode(int treeDepth, const int maxDepth)
    106127{
    107   this->treeDepth = treeDepth;
    108   /* debug output */
    109   for( int i = 0; i < treeDepth; ++i)
    110     PRINT(3)(" |");
    111   PRINT(3)(" | +-| (Event) Separating Node Depth: %i/%i\n", treeDepth, maxDepth);
     128
    112129
    113130  /* dimension calculation & limit checking */
     
    118135  /* node separation */
    119136  this->separateNode();
    120   this->nodeA->separateNode(treeDepth + 1, maxDepth);
    121   this->nodeB->separateNode(treeDepth + 1, maxDepth);
    122   this->nodeC->separateNode(treeDepth + 1, maxDepth);
    123   this->nodeD->separateNode(treeDepth + 1, maxDepth);
     137
     138//   this->nodeA->separateNode(treeDepth + 1, maxDepth);
     139//   this->nodeB->separateNode(treeDepth + 1, maxDepth);
     140//   this->nodeC->separateNode(treeDepth + 1, maxDepth);
     141//   this->nodeD->separateNode(treeDepth + 1, maxDepth);
    124142}
    125143
     
    252270  Vector v;
    253271
    254   v.x = this->center.x + this->pDimension->getAxis() / 2.0f;
    255   v.z = this->center.z + this->pDimension->getAxis() / 2.0f;
     272  v.x = this->pDimension->getCenter()->x + this->pDimension->getAxis() / 2.0f;
     273  v.z = this->pDimension->getCenter()->z + this->pDimension->getAxis() / 2.0f;
    256274  Rectangle* rA = new Rectangle(v, this->pDimension->getAxis() / 2.0f);
    257275
    258   v.z = this->center.z - this->pDimension->getAxis() / 2.0f;
     276  v.z = this->pDimension->getCenter()->z - this->pDimension->getAxis() / 2.0f;
    259277  Rectangle* rB = new Rectangle(v, this->pDimension->getAxis() / 2.0f);
    260278
    261   v.x = this->center.x - this->pDimension->getAxis() / 2.0f;
     279  v.x = this->pDimension->getCenter()->x - this->pDimension->getAxis() / 2.0f;
    262280  Rectangle* rC = new Rectangle(v, this->pDimension->getAxis() / 2.0f);
    263281
    264   v.z = this->center.z + this->pDimension->getAxis() / 2.0f;
     282  v.z = this->pDimension->getCenter()->z + this->pDimension->getAxis() / 2.0f;
    265283  Rectangle* rD = new Rectangle(v, this->pDimension->getAxis() / 2.0f);
    266284
    267285  /* now propagate */
    268   this->nodeA = new QuadtreeNode(pTriA, lenA, this->pVertices, this->numVertices, this->quadtree, this, rA);
    269   this->nodeB = new QuadtreeNode(pTriB, lenB, this->pVertices, this->numVertices, this->quadtree, this, rB);
    270   this->nodeC = new QuadtreeNode(pTriC, lenC, this->pVertices, this->numVertices, this->quadtree, this, rC);
    271   this->nodeD = new QuadtreeNode(pTriD, lenD, this->pVertices, this->numVertices, this->quadtree, this, rD);
     286  this->nodeA = new QuadtreeNode(pTriA, lenA, this->pVertices, this->numVertices, this->quadtree, this, rA, this->treeDepth + 1, this->maxDepth);
     287  this->nodeB = new QuadtreeNode(pTriB, lenB, this->pVertices, this->numVertices, this->quadtree, this, rB, this->treeDepth + 1, this->maxDepth);
     288  this->nodeC = new QuadtreeNode(pTriC, lenC, this->pVertices, this->numVertices, this->quadtree, this, rC, this->treeDepth + 1, this->maxDepth);
     289  this->nodeD = new QuadtreeNode(pTriD, lenD, this->pVertices, this->numVertices, this->quadtree, this, rD, this->treeDepth + 1, this->maxDepth);
    272290}
    273291
Note: See TracChangeset for help on using the changeset viewer.