Ignore:
Timestamp:
04/23/07 16:19:30 (17 years ago)
Author:
mattausch
Message:

implemented part of rendering estimation of wimmer et al. for view space / object space subdivision.
warning: not working with undersampling estimation + local visibility based subdivision.

Location:
GTP/trunk/Lib/Vis/OnlineCullingCHC
Files:
10 edited

Legend:

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

    r2306 r2332  
    6767        float GetNodeVisibilityRatio(GtpVisibility::HierarchyNode *node) const; 
    6868 
     69        GtpVisibility::HierarchyNode *GetParent(GtpVisibility::HierarchyNode *node); 
     70 
     71 
    6972protected: 
    7073 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformHierarchyInterface.h

    r2306 r2332  
    130130        float GetNodeVisibilityRatio(GtpVisibility::HierarchyNode *node) const { return 1.0f;} 
    131131 
     132        GtpVisibility::HierarchyNode *GetParent(GtpVisibility::HierarchyNode *node) { return NULL;} 
     133 
     134 
    132135protected: 
     136 
    133137        /** Renders the given geometry  
    134138        */ 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp

    r2306 r2332  
    188188//----------------------------------------------------------------------- 
    189189void OctreeHierarchyInterface::DetermineVisibilityRatio(GtpVisibility::HierarchyNode *node) const 
    190 {                
     190{        
    191191        Octree *octant = static_cast<Octree *>(node); 
    192192 
     
    394394} 
    395395 
     396//----------------------------------------------------------------------- 
     397GtpVisibility::HierarchyNode *OctreeHierarchyInterface::GetParent(GtpVisibility::HierarchyNode *node) 
     398{ 
     399        Octree *octree = static_cast<Octree *>(node); 
     400 
     401        return octree->getParent(); 
     402} 
    396403 
    397404} // namespace Ogre 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/Plugin_VisibilitySceneManager.vcproj

    r2318 r2332  
    113113                                AdditionalLibraryDirectories="&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib&quot;;&quot;$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)&quot;;&quot;..\..\..\Preprocessing\lib\$(ConfigurationName)&quot;;..\..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib;..\..\..\Preprocessing\src\GL;..\..\..\..\..\..\..\NonGTP\Zlib\lib;&quot;..\..\lib\$(ConfigurationName)&quot;;&quot;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\lib\$(ConfigurationName)&quot;;&quot;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\ObjReader\lib\$(ConfigurationName)&quot;" 
    114114                                ModuleDefinitionFile="..\misc\OgreVisibilitySceneManager.def" 
    115                                 GenerateDebugInformation="TRUE" 
     115                                GenerateDebugInformation="FALSE" 
    116116                                SubSystem="2" 
    117117                                OptimizeReferences="2" 
     
    371371                                OptimizeForWindowsApplication="TRUE" 
    372372                                AdditionalIncludeDirectories="&quot;$(OGRE_PATH)\PlugIns\OctreeSceneManager\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include&quot;;..\include;..\..\..\OnlineCullingCHC\include;..\..\..\Preprocessing\src;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\include" 
    373                                 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGIN_KD_TERRAIN_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE" 
     373                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGIN_KD_TERRAIN_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE" 
    374374                                StringPooling="TRUE" 
    375375                                RuntimeLibrary="2" 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/include/ObjReader.h

    r2124 r2332  
    2121                                  const std::string &visibilitySolution, 
    2222                                  Ogre::SceneNode *root); 
    23         void dummy(); 
    24         Ogre::Entity * dummy2(const std::string &name, 
    25                                 GtpVisibilityPreprocessor::Intersectable *object); 
     23         
    2624        Ogre::Entity *CreateEntity(const std::string &name, 
    2725                                                           GtpVisibilityPreprocessor::Intersectable *object); 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/src/ObjReader.vcproj

    r2318 r2332  
    295295                        <Tool 
    296296                                Name="VCCLCompilerTool" 
    297                                 AdditionalIncludeDirectories="&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;..\include" 
     297                                AdditionalIncludeDirectories="&quot;$(OGRE_PATH)\Dependencies\include\CEGUI&quot;;&quot;$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include&quot;;&quot;$(OGRE_PATH)\OgreMain\include&quot;;&quot;$(OGRE_PATH)\Dependencies\include&quot;;&quot;$(OGRE_PATH)\Samples\Common\include&quot;;..\include;..\..\..\Preprocessing\src" 
    298298                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;OBJREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE" 
    299299                                RuntimeLibrary="2" 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/include/CoherentHierarchicalCullingManager.h

    r1492 r2332  
    3030 
    3131protected: 
     32 
    3233        /** Decides if node is considered to be visible depeding on the  
    3334                assumed visibility factor. 
     
    3637        bool DecideVisible(HierarchyNode *node) const; 
    3738 
    38  
    3939        /** Skip query for this node. 
    4040        */ 
    4141        void SkipQuery(HierarchyNode *node) const; 
     42 
     43        /** If this node is still valid for traversal in this frame. 
     44                It is possible that the parent was tested invisible before 
     45                so this node can be skipped. 
     46        */ 
     47        bool NodeInvalid(HierarchyNode *node) const; 
    4248 
    4349        /** number of steps the visibility is assumed to be valid. 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/include/HierarchyInterface.h

    r2306 r2332  
    159159        std::vector<HierarchyNode *> *GetVisibleNodes(); 
    160160 
    161         virtual void PullUpLastVisited(GtpVisibility::HierarchyNode *node, const int frameId) const = 0; 
    162         virtual void DetermineVisibilityRatio(GtpVisibility::HierarchyNode *node) const = 0; 
    163         virtual float GetNodeVisibilityRatio(GtpVisibility::HierarchyNode *node) const = 0; 
     161        virtual void PullUpLastVisited(HierarchyNode *node, const int frameId) const = 0; 
     162        virtual void DetermineVisibilityRatio(HierarchyNode *node) const = 0; 
     163        virtual float GetNodeVisibilityRatio(HierarchyNode *node) const = 0; 
     164 
     165        virtual HierarchyNode *GetParent(HierarchyNode *node) = 0; 
    164166 
    165167protected: 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/src/CoherentHierarchicalCullingManager.cpp

    r2306 r2332  
    3333        while (!mHierarchyInterface->GetQueue()->empty() || !queryQueue.empty()) 
    3434        { 
    35                 bool resultAvailable = false; 
    36  
     35                ////////// 
    3736                //-- only wait for result if there are no nodes to process 
    3837                while (!queryQueue.empty() &&  
    39                                 queryQueue.front().second->GetQueryResult(visiblePixels,  
    40                                 mHierarchyInterface->GetQueue()->empty())) 
     38                           (NodeInvalid(queryQueue.front().first) || 
     39                            queryQueue.front().second->GetQueryResult( 
     40                                             visiblePixels, mHierarchyInterface->GetQueue()->empty()))) 
    4141                { 
    4242                        HierarchyNode *node = queryQueue.front().first; 
    43                          
    4443                        queryQueue.pop(); 
    45                          
     44 
     45                        // parent was tested invisible => remove children from queue 
     46                        if (NodeInvalid(node)) 
     47                        { 
     48                                //CullingLogManager::GetSingleton()->LogMessage("skipping this node"); 
     49                                continue; 
     50                        } 
     51                        // tested visible 
    4652                        if (visiblePixels > mVisibilityThreshold) 
    4753                        { 
    48                                 // in case geometry is in omterior node: ensure that we only traverse once 
     54                                // in case geometry is in interior node: ensure that we only traverse once 
    4955                                if (!mHierarchyInterface->IsNodeVisible(node)) 
    5056                                { 
     
    5864                                mHierarchyInterface->SetNodeVisible(node, false); 
    5965 
    60                                 ++ mNumQueryCulledNodes; 
     66                ++ mNumQueryCulledNodes; 
    6167                                 
    6268                                if (mVisualizeCulledNodes) 
     
    6571                                } 
    6672                        } 
     73                         
     74                        // update node's visited flag 
     75                        mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId());    
    6776                } 
    6877                 
     
    7382                        mHierarchyInterface->GetQueue()->pop(); 
    7483                                 
     84                        // parent was tested invisible => remove children from queue 
     85                        if (NodeInvalid(node)) 
     86                        { 
     87                                //CullingLogManager::GetSingleton()->LogMessage("skipping this node"); 
     88                                continue; 
     89                        } 
     90 
    7591                        bool intersects = false; 
    7692 
     
    96112                                 
    97113                                // if we assume node to be visible in this frame => skip query  
    98                                 bool skipQuery = wasVisible && (mAssumedVisibility > 0) &&  
    99                                         DecideVisible(node) && mHierarchyInterface->HasGeometry(node); 
     114                                const bool skipQuery = wasVisible &&  
     115                                                           (mAssumedVisibility > 0) &&  
     116                                                                           DecideVisible(node) &&  
     117                                                                           mHierarchyInterface->HasGeometry(node); 
    100118 
    101119                                if (skipQuery) 
     
    113131                                mHierarchyInterface->SetNodeVisible(node, wasVisible && issueQuery); 
    114132 
    115                                 // update node's visited flag 
    116                                 mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 
    117                                  
    118133                                // skip testing previously visible nodes without geometry 
    119134                                if (issueQuery) 
     
    124139                                                IssueNodeOcclusionQuery(node, wasVisible))); 
    125140                                } 
    126                                  
     141                                else 
     142                                { 
     143                                        // update node's visited flag 
     144                                        mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 
     145                                } 
     146 
    127147                                // always traverse a node if it was visible 
    128148                                if (wasVisible) 
     
    164184        mHierarchyInterface->TraverseNode(node); 
    165185} 
    166  
     186//----------------------------------------------------------------------- 
     187bool CoherentHierarchicalCullingManager::NodeInvalid(HierarchyNode *node) const 
     188{ 
     189        // parent was tested invisible in this frame 
     190        HierarchyNode *parent = mHierarchyInterface->GetParent(node); 
     191    return  
     192                parent &&  
     193                (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId()) &&  
     194                !mHierarchyInterface->IsNodeVisible(parent); 
     195} 
    167196} // namespace GtpVisibility 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/src/RandomUpdateCullingManager.cpp

    r2306 r2332  
    105105                        else 
    106106                        { 
    107                                 // identify previously visible nodes 
    108                                 const bool wasVisible = mHierarchyInterface->IsNodeVisible(node) &&  
    109                                         (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId() - 1); 
    110                                  
    111                                 // if we assume node to be visible in this frame => skip query  
    112                                 const bool skipQuery = wasVisible && (mAssumedVisibility > 0) &&  
    113                                         DecideVisible(node) && mHierarchyInterface->HasGeometry(node); 
    114  
    115                                 if (skipQuery) 
    116                                 { 
    117                                         SkipQuery(node); 
    118                                         continue; 
    119                                 } 
    120                                                                  
     107                                 
    121108                                if (mHierarchyInterface->IsNodeFullyVisible(node)) 
    122109                                { 
     
    162149                                } 
    163150 
     151                                // identify previously visible nodes 
     152                                const bool wasVisible = mHierarchyInterface->IsNodeVisible(node) &&  
     153                                        (mHierarchyInterface->LastVisited(node) == mHierarchyInterface->GetFrameId() - 1); 
     154                                         
     155 
     156                                // if we assume node to be visible in this frame => skip query  
     157                                const bool skipQuery = wasVisible && (mAssumedVisibility > 0) &&  
     158                                        DecideVisible(node) && mHierarchyInterface->HasGeometry(node); 
     159 
     160                                if (skipQuery) 
     161                                { 
     162                                        SkipQuery(node); 
     163                                        continue; 
     164                                } 
     165                                                         
    164166                // identify nodes that we cannot skip queries for 
    165167                                // geometry not only in leaves => test for renderable geometry 
Note: See TracChangeset for help on using the changeset viewer.