Changeset 135 for trunk/VUT/Ogre/src/OgrePlatformQueryManager.cpp
- Timestamp:
- 06/16/05 18:13:33 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/Ogre/src/OgrePlatformQueryManager.cpp
r134 r135 25 25 bool relativeVisibility) 26 26 { 27 if (relativeVisibility)28 LogManager::getSingleton().logMessage("relative");29 else30 LogManager::getSingleton().logMessage("absolute");31 32 27 // we need access to the scene manager and the rendersystem 33 28 PlatformHierarchyInterface *pfHierarchyInterface = … … 39 34 Camera *pCam = const_cast<Camera *>(&camera); 40 35 36 bool overlayEnabled = mViewport->getOverlaysEnabled(); 37 mViewport->setOverlaysEnabled(false); 41 38 pfHierarchyInterface->GetSceneManager()->_renderScene(pCam, mViewport, false); 42 39 … … 53 50 GtpVisibility::GeometryList geometryList; 54 51 55 GtpVisibility::HierarchyNodeList:: const_iterator nodeIt, nodeIt_end = nodeList->end();52 GtpVisibility::HierarchyNodeList::iterator nodeIt, nodeIt_end = nodeList->end(); 56 53 // geometry list has still do be built 57 54 GtpVisibility::GeometryList::iterator geometryIt, geometryIt_end; 58 55 56 // to obtain the correct number of projected pixels, depth write must be disabled 57 58 bool enableDepthWrite = false; 59 // this option must be provided by the scene manager 60 pfHierarchyInterface->GetSceneManager()->setOption("DepthWrite", &enableDepthWrite); 61 62 /* relative visiblity: 63 1) get visible pixels count of objects 64 2) clear frame buffer 65 3) get projected visible pixels count: 66 test all objects again without depth write (set as option in scene manager) 67 4) calculate ratio between visible vs. projected pixels 68 */ 59 69 // for relative visibility we need 2 rendering passes 60 70 int n = relativeVisibility ? 2 : 1; … … 63 73 { 64 74 //-- queries for hierarchy nodes 65 for (nodeIt = nodeList->begin(); nodeIt != nodeIt_end; ++nodeIt) 75 for (nodeIt = nodeList->begin(); nodeIt != nodeIt_end; ++nodeIt) 66 76 { 67 77 // TODO: DELETE QUERIES FROM PREVIOUS RENDER … … 69 79 70 80 // store geometry of the hierarchy node in a geometry list (only once!) 71 if (i == n - 2)81 if (i == 0) 72 82 { 73 83 mHierarchyInterface->GetGeometry(*nodeIt, &geometryList, false); … … 83 93 } 84 94 85 // --- relative visiblity 86 /* 87 1) get visible pixels count of objects 88 2) clear frame buffer 89 3) get projected visible pixels count: 90 test all objects again without depth write (set as option in scene manager) 91 4) calculate ratio between visible vs. projected pixels 92 */ 93 if (i == n - 2) // if relativeVisibility, between first and second loop 94 { 95 pfHierarchyInterface->GetRenderSystem()->clearFrameBuffer(FBT_COLOUR | FBT_DEPTH); 96 } 97 98 // to obtain the correct number of projected pixels, depth write must be disabled 99 bool enableDepthWrite = (i != n - 2); 100 101 // this option must be provided by the scene manager 102 pfHierarchyInterface->GetSceneManager()->setOption("DepthWrite", &enableDepthWrite); 95 96 pfHierarchyInterface->GetRenderSystem()->clearFrameBuffer(FBT_DEPTH); 103 97 } 104 98 99 enableDepthWrite = true; 100 // this option must be provided by the scene manager 101 pfHierarchyInterface->GetSceneManager()->setOption("DepthWrite", &enableDepthWrite); 102 103 mViewport->setOverlaysEnabled(overlayEnabled); 105 104 106 105 //---- collect results 107 unsigned int visiblePixels ;106 unsigned int visiblePixels = 0; 108 107 109 108 GtpVisibility::QueryList::iterator visQueryIt, projQueryIt; … … 111 110 visQueryIt = queryList[0].begin(); 112 111 projQueryIt = queryList[1].begin(); 112 113 113 114 114 for (nodeIt = nodeList->begin(); nodeIt != nodeIt_end; ++nodeIt) 115 115 { 116 116 (*visQueryIt)->GetQueryResult(visiblePixels, true); 117 117 118 118 119 float vis = (float)visiblePixels; 119 120 … … 121 122 { 122 123 (*projQueryIt)->GetQueryResult(visiblePixels, true); 123 std::stringstream d; d << "relativ " << visiblePixels; 124 LogManager::getSingleton().logMessage(d.str()); 125 124 126 125 if (visiblePixels > 0) 127 126 { … … 132 131 133 132 ++visQueryIt; 134 133 135 134 // leave nodes with visibilty 0 in queue: 136 135 // happens if node is intersected by near plane … … 141 140 geometryIt_end = geometryList.end(); 142 141 143 /*for (geometryIt = geometryList.begin(); geometryIt != geometryIt_end; ++geometryIt)142 for (geometryIt = geometryList.begin(); geometryIt != geometryIt_end; ++geometryIt) 144 143 { 145 (*absQueryIt)->GetQueryResult(visiblePixels, true); 144 (*visQueryIt)->GetQueryResult(visiblePixels, true); 145 146 146 147 147 float vis = (float)visiblePixels; … … 150 150 if (relativeVisibility) 151 151 { 152 (* relQueryIt)->GetQueryResult(visiblePixels, true);152 (*projQueryIt)->GetQueryResult(visiblePixels, true); 153 153 154 154 if (visiblePixels) … … 156 156 vis /= (float) visiblePixels; 157 157 } 158 ++ relQueryIt;158 ++projQueryIt; 159 159 } 160 160 161 ++ absQueryIt;161 ++visQueryIt; 162 162 163 163 // approximate depth ordering during rendering => … … 167 167 visibleGeometry->push_back(GtpVisibility::MeshInfo(*geometryIt, vis)); 168 168 } 169 } */169 } 170 170 171 171 } … … 176 176 bool relativeVisibility) 177 177 { 178 visibleNodes->push_back(GtpVisibility::NodeInfo(mHierarchyInterface->GetSceneRoot(), 1.0f));178 179 179 } 180 180 //-----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.