void fillSubModelArary(const ModelContainer* pModelContainer, const TreeNode *root, Array<SubModel>& array, Vector3& pLo, Vector3& pHi) { Vector3 lo = Vector3(inf(), inf(), inf()); Vector3 hi = Vector3(-inf(), -inf(), -inf()); for(int i=0; i< root->getNValues(); i++) { SubModel sm = pModelContainer->getSubModel(root->getStartPosition() + i); lo = lo.min(sm.getAABoxBounds().low()); hi = hi.max(sm.getAABoxBounds().high()); array.append(sm); } if(root->getChild((TreeNode *) &pModelContainer->getTreeNode(0), 0)) { fillSubModelArary(pModelContainer, root->getChild((TreeNode *)&pModelContainer->getTreeNode(0), 0), array, lo, hi); } if(root->getChild((TreeNode *)&pModelContainer->getTreeNode(0), 1)) { fillSubModelArary(pModelContainer, root->getChild((TreeNode *)&pModelContainer->getTreeNode(0), 1), array, lo, hi); } float dist1 = (hi -lo).magnitude(); AABox b; root->getBounds(b); float dist2 = (b.high() -b.low()).magnitude(); if(dist1 > dist2) { // error int xxx = 0; } }
void fillSubModelArary (const ModelContainer* pModelContainer, const TreeNode *root, Array<SubModel>& array, Vector3& pLo, Vector3& pHi) { Vector3 lo = Vector3 (inf (), inf (), inf ()); Vector3 hi = Vector3 (-inf (), -inf (), -inf ()); //printf("[VMAP] %i Submodels\n", root->getNValues ()); for (int i = 0; i < root->getNValues (); i++) { SubModel sm = pModelContainer->getSubModel (root->getStartPosition () + i); lo = lo.min (sm.getAABoxBounds ().low ()); hi = hi.max (sm.getAABoxBounds ().high ()); array.append (sm); } if (root->getChild ((TreeNode *) & pModelContainer->getTreeNode (0), 0)) { fillSubModelArary (pModelContainer, root->getChild ((TreeNode *) & pModelContainer->getTreeNode (0), 0), array, lo, hi); } if (root->getChild ((TreeNode *) & pModelContainer->getTreeNode (0), 1)) { fillSubModelArary (pModelContainer, root->getChild ((TreeNode *) & pModelContainer->getTreeNode (0), 1), array, lo, hi); } float dist1 = (hi - lo).magnitude (); AABox b; root->getBounds (b); float dist2 = (b.high () - b.low ()).magnitude (); if (dist1 > dist2) { // error //printf("error in boundingbox size vs. hi-lo size."); // this error seems to happen alot! maybe need to do something against it? int xxx = 0; } }
//========================================== void ModelContainerView::addModelContainer(const std::string& pName,const ModelContainer* pModelContainer) { // VARArea::UsageHint::WRITE_EVERY_FEW_FRAMES int offset=0; Array<int> iIndexArray; Array<Vector3> iGlobArray; Array<SubModel> SMArray; Vector3 lo, hi; fillSubModelArary(pModelContainer, &pModelContainer->getTreeNode(0), SMArray,lo,hi); for(int i=0; i<SMArray.size(); ++i) { SubModel sm = SMArray[i]; Array<Vector3> vArray; Array<int> iArray; fillVertexAndIndexArrays(sm, vArray, iArray); for(int j=0;j<iArray.size(); ++j) { iIndexArray.append(offset+iArray[j]); } for(int j=0;j<vArray.size(); ++j) { iGlobArray.append(vArray[j]); } offset += vArray.size(); //break; } iTriVarTable.set(pName, new VAR(iGlobArray ,iVARAreaRef)); iTriIndexTable.set(pName, iIndexArray); }
void ModelContainerView::addModelContainer (const std::string& pName, const ModelContainer* pModelContainer ) { // VARArea::UsageHint::WRITE_EVERY_FEW_FRAMES //printf("[VMAP] Adding ModelContainer: %s\n", pName.c_str()); Array<SubModel> SMArray; Vector3 lo, hi; fillSubModelArary (pModelContainer, &pModelContainer->getTreeNode (0), SMArray, lo, hi); for (int i = 0; i < SMArray.size (); ++i) { SubModel sm = SMArray[i]; Array<Vector3> vArray; fillVertexArray (sm, vArray); //break; } }