Ignore:
Timestamp:
08/21/06 17:05:45 (18 years ago)
Author:
szydlowski
Message:

implemented enhanced vis with early abort
also own frame & time counter in demo mode
fixed dependencies in solution file

Location:
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreKdTree.h

    r1220 r1250  
    213213                        virtual bool isEmpty() const = 0; 
    214214                        virtual bool hasGeometry() const = 0; 
     215                         
     216                        virtual void mergeLeaves(std::set<Leaf *>& leaves) = 0; 
    215217 
    216218                        // Gets this node's parent (NULL if this is the root). 
     
    223225                        // add contained objects to render queue 
    224226                        virtual void queueVisibleObjects(unsigned long currentFrame,  
    225                                 Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes) = 0; 
     227                                Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, bool fullVis = false) = 0; 
    226228 
    227229                        // add contained geometry (Entities) to list 
     
    326328                        virtual bool hasGeometry() const { return false; }; 
    327329 
     330                        virtual void mergeLeaves(std::set<Leaf *>& leaves) 
     331                        { 
     332                                for (std::set<Leaf *>::iterator it = mLeaves.begin(); it != mLeaves.end(); it++) 
     333                                        leaves.insert(*it); 
     334                        } 
     335 
    328336                        // a branch should have at least one child 
    329337                        virtual KdTree::Node * getLeftChild() const { return mLeft; }; 
     
    331339 
    332340                        virtual void queueVisibleObjects(unsigned long currentFrame,  
    333                                 Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes) 
     341                                Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, bool fullVis = false) 
    334342                        { 
    335343                                if (showBoxes) 
    336344                                        if (mLevel == mOwner->getHiLiteLevel() || mOwner->getShowAllBoxes()) 
    337345                                                queue->addRenderable(getWireBoundingBox()); 
     346 
     347                                if (fullVis) 
     348                                        for (std::set<Leaf *>::iterator it = mLeaves.begin(); it != mLeaves.end(); it ++) 
     349                                                (*it)->queueVisibleObjects(currentFrame, cam, queue, onlyShadowCasters, showBoxes, fullVis); 
    338350                        } 
    339351 
     
    347359                                mWorldAABB.setNull(); 
    348360 
     361                                // merge box & leaves 
    349362                                if (mLeft) 
     363                                { 
    350364                                        mWorldAABB.merge(mLeft->mWorldAABB); 
     365                                        mLeft->mergeLeaves(mLeaves); 
     366                                } 
    351367                                if (mRight) 
     368                                { 
    352369                                        mWorldAABB.merge(mRight->mWorldAABB); 
     370                                        mRight->mergeLeaves(mLeaves); 
     371                                } 
    353372 
    354373                                // update parent recursively 
     
    361380                        Plane  * mSplitPlane; 
    362381                        PlaneEvent::Side mPlaneSide; 
     382                protected: 
     383                        std::set<Leaf *> mLeaves; 
    363384                }; 
    364385 
     
    373394 
    374395                        // a leaf is a leaf, dammit 
    375                         virtual bool isLeaf() const { return true; }; 
     396                        virtual bool isLeaf() const { return true; } 
    376397 
    377398                        // a leaf is empty when it does not posses renderables 
    378                         virtual bool isEmpty() const { return mKdRenderables.empty(); }; 
     399                        virtual bool isEmpty() const { return mKdRenderables.empty(); } 
    379400 
    380401                        // a leaf has geometry when it has renderables 
    381                         virtual bool hasGeometry() const { return !mKdRenderables.empty(); }; 
     402                        virtual bool hasGeometry() const { return !mKdRenderables.empty(); } 
     403 
     404                        // a leaf adds itself to the leaf set 
     405                        virtual void mergeLeaves(std::set<Leaf *>& leaves)      { leaves.insert(this); } 
    382406 
    383407                        // a leaf never has children  
     
    386410 
    387411                        virtual void queueVisibleObjects(unsigned long currentFrame,  
    388                                 Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes); 
     412                                Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, bool fullVis = false); 
    389413 
    390414                        virtual void getGeometryList(GtpVisibility::GeometryVector *geometryList); 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreKdTreeCamera.h

    r1212 r1250  
    5151        // enhanced visibility 
    5252        NodeVisibility getVisibilityEnhanced(const AxisAlignedBox& box) const; 
     53 
     54        // DEBUG 
     55        //mutable unsigned int mNumVisQueries; 
    5356protected: 
    5457 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTree.cpp

    r1211 r1250  
    11881188                bool showBoxes, KdTree::NodeList& visibleNodes) 
    11891189        { 
     1190                // debug 
     1191                //cam->mNumVisQueries = 0; 
     1192 
    11901193                if (mKdRoot) 
    11911194                        recQueueVisibleObjects(mKdRoot, Root::getSingleton().getCurrentFrameNumber(), 
    11921195                                cam, queue, onlyShadowCasters, showBoxes, visibleNodes); 
     1196 
     1197                //mBuildLog->logMessage("Frame # " + StringConverter::toString(Root::getSingleton().getCurrentFrameNumber()) + 
     1198                //      " ," + StringConverter::toString(cam->mNumVisQueries) + " vis queries"); 
    11931199        } 
    11941200 
     
    12071213                        visibleNodes.push_back(node); 
    12081214 
    1209                         node->queueVisibleObjects(currentFrame, cam, queue, onlyShadowCasters, showBoxes); 
    1210  
    1211                         if (node->getLeftChild()) 
    1212                                 recQueueVisibleObjects(node->getLeftChild(), currentFrame,  
    1213                                 cam, queue, onlyShadowCasters, showBoxes, visibleNodes,  
    1214                                 (fullVis || vis == KdTreeCamera::KDNV_FULL) ? true : false); 
    1215                         if (node->getRightChild()) 
    1216                                 recQueueVisibleObjects(node->getRightChild(), currentFrame,  
    1217                                 cam, queue, onlyShadowCasters, showBoxes, visibleNodes,  
    1218                                 (fullVis || vis == KdTreeCamera::KDNV_FULL) ? true : false); 
     1215                        bool v = (fullVis || vis == KdTreeCamera::KDNV_FULL); 
     1216                        node->queueVisibleObjects(currentFrame, cam, queue, onlyShadowCasters, showBoxes, v); 
     1217 
     1218                        if (!v) 
     1219                        { 
     1220 
     1221                                if (node->getLeftChild()) 
     1222                                        recQueueVisibleObjects(node->getLeftChild(), currentFrame,  
     1223                                        cam, queue, onlyShadowCasters, showBoxes, visibleNodes, v); 
     1224                                if (node->getRightChild()) 
     1225                                        recQueueVisibleObjects(node->getRightChild(), currentFrame,  
     1226                                        cam, queue, onlyShadowCasters, showBoxes, visibleNodes, v); 
     1227                        } 
    12191228                } 
    12201229        } 
     
    13661375        //------------------------------------------------------------------------- 
    13671376        void KdTree::Leaf::queueVisibleObjects(unsigned long currentFrame,  
    1368                 Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes) 
     1377                Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, bool fullVis) 
    13691378        { 
    13701379                KdRenderableList::iterator it  = mKdRenderables.begin(); 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTreeCamera.cpp

    r1212 r1250  
    2828{ 
    2929        mEnhancedVisMode = enhanced; 
    30         //if (mEnhancedVisMode) 
    31         //      getVisibility = getVisibilityEnhanced; 
    32         //else 
    33         //      getVisibility = getVisibilitySimple; 
    3430} 
    3531 
     
    4339KdTreeCamera::NodeVisibility KdTreeCamera::getVisibilityEnhanced(const AxisAlignedBox& box) const 
    4440{ 
     41        //++ mNumVisQueries; 
    4542        // Null boxes always invisible 
    4643        if ( box.isNull() ) 
     
    10198KdTreeCamera::NodeVisibility KdTreeCamera::getVisibilitySimple(const AxisAlignedBox& box) const 
    10299{ 
     100        //++ mNumVisQueries; 
     101 
    103102        // dummy 
    104103        FrustumPlane* culledBy = 0; 
Note: See TracChangeset for help on using the changeset viewer.