Changeset 2332 for GTP/trunk/Lib/Vis/OnlineCullingCHC
- Timestamp:
- 04/23/07 16:19:30 (18 years ago)
- Location:
- GTP/trunk/Lib/Vis/OnlineCullingCHC
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOctreeHierarchyInterface.h
r2306 r2332 67 67 float GetNodeVisibilityRatio(GtpVisibility::HierarchyNode *node) const; 68 68 69 GtpVisibility::HierarchyNode *GetParent(GtpVisibility::HierarchyNode *node); 70 71 69 72 protected: 70 73 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgrePlatformHierarchyInterface.h
r2306 r2332 130 130 float GetNodeVisibilityRatio(GtpVisibility::HierarchyNode *node) const { return 1.0f;} 131 131 132 GtpVisibility::HierarchyNode *GetParent(GtpVisibility::HierarchyNode *node) { return NULL;} 133 134 132 135 protected: 136 133 137 /** Renders the given geometry 134 138 */ -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOctreeHierarchyInterface.cpp
r2306 r2332 188 188 //----------------------------------------------------------------------- 189 189 void OctreeHierarchyInterface::DetermineVisibilityRatio(GtpVisibility::HierarchyNode *node) const 190 { 190 { 191 191 Octree *octant = static_cast<Octree *>(node); 192 192 … … 394 394 } 395 395 396 //----------------------------------------------------------------------- 397 GtpVisibility::HierarchyNode *OctreeHierarchyInterface::GetParent(GtpVisibility::HierarchyNode *node) 398 { 399 Octree *octree = static_cast<Octree *>(node); 400 401 return octree->getParent(); 402 } 396 403 397 404 } // namespace Ogre -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/Plugin_VisibilitySceneManager.vcproj
r2318 r2332 113 113 AdditionalLibraryDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)";"$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)";"..\..\..\Preprocessing\lib\$(ConfigurationName)";..\..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib;..\..\..\Preprocessing\src\GL;..\..\..\..\..\..\..\NonGTP\Zlib\lib;"..\..\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\ObjReader\lib\$(ConfigurationName)"" 114 114 ModuleDefinitionFile="..\misc\OgreVisibilitySceneManager.def" 115 GenerateDebugInformation=" TRUE"115 GenerateDebugInformation="FALSE" 116 116 SubSystem="2" 117 117 OptimizeReferences="2" … … 371 371 OptimizeForWindowsApplication="TRUE" 372 372 AdditionalIncludeDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\include";"$(OGRE_PATH)\Samples\Common\include";"$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";..\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" 374 374 StringPooling="TRUE" 375 375 RuntimeLibrary="2" -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/include/ObjReader.h
r2124 r2332 21 21 const std::string &visibilitySolution, 22 22 Ogre::SceneNode *root); 23 void dummy(); 24 Ogre::Entity * dummy2(const std::string &name, 25 GtpVisibilityPreprocessor::Intersectable *object); 23 26 24 Ogre::Entity *CreateEntity(const std::string &name, 27 25 GtpVisibilityPreprocessor::Intersectable *object); -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/src/ObjReader.vcproj
r2318 r2332 295 295 <Tool 296 296 Name="VCCLCompilerTool" 297 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\Samples\Common\include";..\include "297 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\Samples\Common\include";..\include;..\..\..\Preprocessing\src" 298 298 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;OBJREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE" 299 299 RuntimeLibrary="2" -
GTP/trunk/Lib/Vis/OnlineCullingCHC/include/CoherentHierarchicalCullingManager.h
r1492 r2332 30 30 31 31 protected: 32 32 33 /** Decides if node is considered to be visible depeding on the 33 34 assumed visibility factor. … … 36 37 bool DecideVisible(HierarchyNode *node) const; 37 38 38 39 39 /** Skip query for this node. 40 40 */ 41 41 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; 42 48 43 49 /** number of steps the visibility is assumed to be valid. -
GTP/trunk/Lib/Vis/OnlineCullingCHC/include/HierarchyInterface.h
r2306 r2332 159 159 std::vector<HierarchyNode *> *GetVisibleNodes(); 160 160 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; 164 166 165 167 protected: -
GTP/trunk/Lib/Vis/OnlineCullingCHC/src/CoherentHierarchicalCullingManager.cpp
r2306 r2332 33 33 while (!mHierarchyInterface->GetQueue()->empty() || !queryQueue.empty()) 34 34 { 35 bool resultAvailable = false; 36 35 ////////// 37 36 //-- only wait for result if there are no nodes to process 38 37 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()))) 41 41 { 42 42 HierarchyNode *node = queryQueue.front().first; 43 44 43 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 46 52 if (visiblePixels > mVisibilityThreshold) 47 53 { 48 // in case geometry is in omterior node: ensure that we only traverse once54 // in case geometry is in interior node: ensure that we only traverse once 49 55 if (!mHierarchyInterface->IsNodeVisible(node)) 50 56 { … … 58 64 mHierarchyInterface->SetNodeVisible(node, false); 59 65 60 66 ++ mNumQueryCulledNodes; 61 67 62 68 if (mVisualizeCulledNodes) … … 65 71 } 66 72 } 73 74 // update node's visited flag 75 mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 67 76 } 68 77 … … 73 82 mHierarchyInterface->GetQueue()->pop(); 74 83 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 75 91 bool intersects = false; 76 92 … … 96 112 97 113 // 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); 100 118 101 119 if (skipQuery) … … 113 131 mHierarchyInterface->SetNodeVisible(node, wasVisible && issueQuery); 114 132 115 // update node's visited flag116 mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId());117 118 133 // skip testing previously visible nodes without geometry 119 134 if (issueQuery) … … 124 139 IssueNodeOcclusionQuery(node, wasVisible))); 125 140 } 126 141 else 142 { 143 // update node's visited flag 144 mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId()); 145 } 146 127 147 // always traverse a node if it was visible 128 148 if (wasVisible) … … 164 184 mHierarchyInterface->TraverseNode(node); 165 185 } 166 186 //----------------------------------------------------------------------- 187 bool 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 } 167 196 } // namespace GtpVisibility -
GTP/trunk/Lib/Vis/OnlineCullingCHC/src/RandomUpdateCullingManager.cpp
r2306 r2332 105 105 else 106 106 { 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 121 108 if (mHierarchyInterface->IsNodeFullyVisible(node)) 122 109 { … … 162 149 } 163 150 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 164 166 // identify nodes that we cannot skip queries for 165 167 // geometry not only in leaves => test for renderable geometry
Note: See TracChangeset
for help on using the changeset viewer.