Ignore:
Timestamp:
08/10/06 17:08:57 (18 years ago)
Author:
szydlowski
Message:

visualization workin' fine (TM)
demo recording/playback partially implemented

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTree.cpp

    r1192 r1195  
    307307        mMaxDepth(maxdepth),  
    308308        mBuildMethod(bm),  
    309         mHiLiteLevel(HILITE_OFF), 
     309        mHiLiteLevel(0), 
    310310        mShowAllBoxes(false), 
    311311        mShowNodes(true), 
     
    335335        void KdTree::init() 
    336336        { 
    337                 // init visualization materials 
    338                 MaterialPtr mphi = MaterialManager::getSingleton().getByName("KdTree/BoxHiLite"); 
    339                 if (mphi.isNull()) 
     337                MaterialPtr mat; 
     338                TextureUnitState *tex; 
     339 
     340                // init visualization materials (unlit solid green/yellow) 
     341                mat = MaterialManager::getSingleton().getByName("KdTree/BoxHiLite"); 
     342                if (mat.isNull()) 
    340343                { 
    341344                        ColourValue green(0, 1, 0); 
    342                         mphi = MaterialManager::getSingleton().create("KdTree/BoxHiLite", "General"); 
    343                         mphi->setAmbient(green); 
    344                         mphi->setDiffuse(green); 
    345                         mphi->setLightingEnabled(true); 
    346                         mphi->getTechnique(0)->getPass(0)->removeAllTextureUnitStates(); 
    347                 } 
    348  
    349                 MaterialPtr mpviz = MaterialManager::getSingleton().getByName("KdTree/BoxViz"); 
    350                 if (mpviz.isNull()) 
     345                        mat = MaterialManager::getSingleton().create("KdTree/BoxHiLite", "General"); 
     346                        //mat->setAmbient(green); 
     347                        //mat->setDiffuse(green); 
     348                        mat->setLightingEnabled(false); 
     349                        tex = mat->getTechnique(0)->getPass(0)->createTextureUnitState(); 
     350                        tex->setColourOperationEx(LBX_SOURCE2, LBS_CURRENT, LBS_MANUAL, green, green); 
     351                } 
     352 
     353                mat = MaterialManager::getSingleton().getByName("KdTree/BoxViz"); 
     354                if (mat.isNull()) 
    351355                { 
    352356                        ColourValue yellow(1, 1, 0); 
    353                         mpviz = MaterialManager::getSingleton().create("KdTree/BoxViz", "General"); 
    354                         mpviz->setAmbient(yellow); 
    355                         mpviz->setDiffuse(yellow); 
    356                         mpviz->setLightingEnabled(true); 
    357                         mpviz->getTechnique(0)->getPass(0)->removeAllTextureUnitStates(); 
     357                        mat = MaterialManager::getSingleton().create("KdTree/BoxViz", "General"); 
     358                        //mat->setAmbient(yellow); 
     359                        //mat->setDiffuse(yellow); 
     360                        mat->setLightingEnabled(false); 
     361                        tex = mat->getTechnique(0)->getPass(0)->createTextureUnitState(); 
     362                        tex->setColourOperationEx(LBX_SOURCE2, LBS_CURRENT, LBS_MANUAL, yellow, yellow); 
    358363                } 
    359364 
     
    11801185 
    11811186        //------------------------------------------------------------------------- 
    1182         void KdTree::queueVisibleObjects(Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes) 
     1187        void KdTree::queueVisibleObjects(Camera* cam, RenderQueue* queue, bool onlyShadowCasters,  
     1188                bool showBoxes, KdTree::NodeList& visibleNodes) 
    11831189        { 
    11841190                if (mKdRoot) 
    11851191                        recQueueVisibleObjects(mKdRoot, Root::getSingleton().getCurrentFrameNumber(), 
    1186                                 cam, queue, onlyShadowCasters, showBoxes); 
     1192                                cam, queue, onlyShadowCasters, showBoxes, visibleNodes); 
    11871193        } 
    11881194 
    11891195        //------------------------------------------------------------------------- 
    11901196        void KdTree::recQueueVisibleObjects(KdTree::Node * node, unsigned long currentFrame,  
    1191                 Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes) 
     1197                Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, KdTree::NodeList& visibleNodes) 
    11921198        { 
    11931199                // test visibility 
    11941200                if (cam->isVisible(node->mAABB)) 
    11951201                { 
    1196 #if 0 
     1202                        visibleNodes.push_back(node); 
     1203 
    11971204                        node->queueVisibleObjects(currentFrame, cam, queue, onlyShadowCasters, showBoxes); 
    11981205 
    11991206                        if (node->getLeftChild()) 
    1200                                 recQueueVisibleObjects(node->getLeftChild(), currentFrame, cam, queue, onlyShadowCasters, showBoxes); 
     1207                                recQueueVisibleObjects(node->getLeftChild(), currentFrame,  
     1208                                cam, queue, onlyShadowCasters, showBoxes, visibleNodes); 
    12011209                        if (node->getRightChild()) 
    1202                                 recQueueVisibleObjects(node->getRightChild(), currentFrame, cam, queue, onlyShadowCasters, showBoxes); 
    1203 #else 
    1204 #ifdef KDTREE_DEBUG 
    1205                         WireBoundingBox * wbb = 0; 
    1206                         if (showBoxes) 
    1207                                 wbb = node->getWireBoundingBox(); 
    1208 #endif 
    1209  
    1210                         if (node->isLeaf()) 
    1211                         { 
    1212                                 KdTree::Leaf * leaf = KDLEAFPTR_CAST(node); 
    1213                                 KdRenderableList::iterator it  = leaf->mKdRenderables.begin(); 
    1214                                 KdRenderableList::iterator end = leaf->mKdRenderables.end(); 
    1215                                 while (it != end) 
    1216                                 {                        
    1217                                         if (!(*it)->isQueued(currentFrame, cam)) 
    1218                                         { 
    1219                                                 (*it)->queueObjects(cam, queue, onlyShadowCasters); 
    1220                                         } 
    1221                                         it++; 
    1222                                 } 
    1223 #ifdef KDTREE_DEBUG 
    1224                                 if (wbb) 
    1225                                         queue->addRenderable(wbb); 
    1226 #else 
    1227                                 if (showBoxes) 
    1228                                         queue->addRenderable(leaf->getWireBoundingBox()); 
    1229 #endif 
    1230                         } 
    1231                         else 
    1232                         { 
    1233                                 KdTree::Branch * branch = KDBRANCHPTR_CAST(node); 
    1234 #ifdef KDTREE_DEBUG 
    1235                                 if (wbb) 
    1236                                         queue->addRenderable(wbb); 
    1237 #else 
    1238                                 if (showBoxes) 
    1239                                         queue->addRenderable(branch->getWireBoundingBox()); 
    1240 #endif 
    1241  
    1242                                 if (branch->mLeft) 
    1243                                         recQueueVisibleObjects(branch->mLeft, currentFrame, cam, queue, onlyShadowCasters, showBoxes); 
    1244                                 if (branch->mRight) 
    1245                                         recQueueVisibleObjects(branch->mRight, currentFrame, cam, queue, onlyShadowCasters, showBoxes); 
    1246                         } 
    1247 #endif 
    1248                 } 
    1249         } 
     1210                                recQueueVisibleObjects(node->getRightChild(), currentFrame,  
     1211                                cam, queue, onlyShadowCasters, showBoxes, visibleNodes); 
     1212                } 
     1213        } 
     1214 
     1215        ////------------------------------------------------------------------------- 
     1216        //void KdTree::findVisibleNodes(NodeList& visibleNodes, Camera * cam) 
     1217        //{ 
     1218        //      if (mKdRoot) 
     1219        //              recFindVisibleNodes(mKdRoot, visibleNodes, cam); 
     1220        //} 
     1221 
     1222        ////------------------------------------------------------------------------- 
     1223        //void KdTree::recFindVisibleNodes(KdTree::Node * node, NodeList& visibleNodes, Camera * cam) 
     1224        //{ 
     1225        //      // test visibility 
     1226        //      if (cam->isVisible(node->mAABB)) 
     1227        //      { 
     1228        //              visibleNodes.push_back(node); 
     1229 
     1230        //              if (node->getLeftChild()) 
     1231        //                      recFindVisibleNodes(node->getLeftChild(), visibleNodes, cam); 
     1232        //              if (node->getRightChild()) 
     1233        //                      recFindVisibleNodes(node->getRightChild(), visibleNodes, cam); 
     1234        //      } 
     1235        //} 
    12501236 
    12511237        /************************************************************************/ 
     
    13561342        } 
    13571343 
     1344        //------------------------------------------------------------------------- 
    13581345        void KdTree::Leaf::queueVisibleObjects(unsigned long currentFrame,  
    13591346                Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes) 
     
    13761363 
    13771364        //------------------------------------------------------------------------- 
     1365        void KdTree::Leaf::getGeometryList(GtpVisibility::GeometryVector *geometryList) 
     1366        { 
     1367                KdRenderableList::iterator it = mKdRenderables.begin(); 
     1368                KdRenderableList::iterator end = mKdRenderables.end(); 
     1369                while (it != end) 
     1370                { 
     1371                        (*it)->getGeometryList(geometryList); 
     1372                        it++; 
     1373                } 
     1374        } 
     1375 
     1376        //------------------------------------------------------------------------- 
    13781377        // update the world aabb based on the contained geometry 
    13791378        void KdTree::Leaf::_updateBounds(bool recurse) 
Note: See TracChangeset for help on using the changeset viewer.