- Timestamp:
- 05/01/05 23:29:27 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/work/TestCullingTerrain/TestCullingTerrainApplication.cpp
r61 r74 3 3 TestCullingTerrainApplication.cpp 4 4 \brief 5 Tests the occlusionculling algorithm5 Tests the visibility culling algorithm 6 6 */ 7 7 … … 44 44 } 45 45 //----------------------------------------------------------------------- 46 void TestCullingTerrainApplication::generateSceneObject(const Vector3 &translationRatio,47 const Vector3 &rotationRatio, const int idx, const String& entName)48 {49 // Setup the ray scene query50 /*Vector3 rotation = mMinAngle + rotationRatio * (mMaxAngle - mMinAngle);51 Vector3 translation = mMinTranslation + translationRatio * (mMaxTranslation - mMinTranslation);52 53 translation.y = 5000;54 Ray ray(translation, Vector3::NEGATIVE_UNIT_Y);55 mRaySceneQuery->setRay(ray);56 57 // Execute query58 RaySceneQueryResult &result = mRaySceneQuery->execute();59 RaySceneQueryResult::iterator itr = result.begin( );60 61 // Get results, create a node/entity on the position62 if ( itr != result.end() && itr->worldFragment )63 {64 char name[16];65 sprintf( name, "%s%d", entName.c_str(), mCount++ );66 67 Entity *ent = mSceneMgr->createEntity( name, entName );68 SceneNode currentObject = mSceneMgr->getRootSceneNode( )->createChildSceneNode( String(name) + "Node", itr->worldFragment->singleIntersection );69 currentObject->attachObject( ent );70 currentObject->setScale( 0.1f, 0.1f, 0.1f );71 }*/72 }73 74 //-----------------------------------------------------------------------75 46 void TestCullingTerrainApplication::createScene( void ) 76 47 { 77 48 mRayQueryExecutor = new RayQueryExecutor(mSceneMgr); 78 49 mTerrainContentGenerator = new TerrainContentGenerator(mSceneMgr, mRayQueryExecutor); 50 79 51 // Set ambient light 80 52 mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); … … 111 83 terrain_cfg = mResourcePath + terrain_cfg; 112 84 #endif 113 mSceneMgr -> setWorldGeometry( terrain_cfg);85 mSceneMgr->setWorldGeometry(terrain_cfg); 114 86 // Infinite far plane? 115 87 if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE)) … … 124 96 // CEGUI setup 125 97 setupGui(); 98 99 mTerrainContentGenerator->generateScene(100); 126 100 } 127 101 //----------------------------------------------------------------------- … … 149 123 void TestCullingTerrainApplication::chooseSceneManager(void) 150 124 { 151 //mSceneMgr = mRoot->getSceneManager(ST_GENERIC);152 125 mSceneMgr = mRoot->getSceneManager(ST_EXTERIOR_CLOSE); 153 126 } … … 171 144 mRotateSpeed *= 2; 172 145 173 mCurrentAlgorithm = 0;//VisibilitySceneTraverser::RENDER_COHERENT;146 mCurrentAlgorithm = GtpVisibility::VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING, 174 147 mThreshold = 0; 175 148 … … 179 152 mEventProcessor->addKeyListener(this); 180 153 181 mRay SceneQuery = mSceneMgr->createRayQuery(Ray());154 mRayQueryExecutor = new RayQueryExecutor(mSceneMgr); 182 155 183 156 // show overlay 184 157 Overlay* pOver = OverlayManager::getSingleton().getByName("Example/VisibilityDemoOverlay"); 185 158 186 mAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/AlgorithmInfo"); 187 mThresholdInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/ThresholdInfo"); 188 mFrustumCulledNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/FrustumCulledNodesInfo"); 189 mQueryCulledNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/QueryCulledNodesInfo"); 190 mTraversedNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/TraversedNodesInfo"); 191 mSceneNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/SceneNodesInfo"); 192 mHierarchyNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/HierarchyNodesInfo"); 193 mRenderedNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Occlusion/RenderedNodesInfo"); 159 mAlgorithmInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/AlgorithmInfo"); 160 mThresholdInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/ThresholdInfo"); 161 mFrustumCulledNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/FrustumCulledNodesInfo"); 162 mQueryCulledNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/QueryCulledNodesInfo"); 163 mTraversedNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/TraversedNodesInfo"); 164 mHierarchyNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/HierarchyNodesInfo"); 165 mRenderedNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/RenderedNodesInfo"); 194 166 195 167 mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); … … 198 170 mQueryCulledNodesInfo->setCaption(": 0"); 199 171 mTraversedNodesInfo->setCaption(": 0"); 200 mSceneNodesInfo->setCaption(": 0");201 172 mHierarchyNodesInfo->setCaption(": 0"); 202 173 mRenderedNodesInfo->setCaption(": 0"); … … 207 178 MouseQueryListener::~MouseQueryListener( ) 208 179 { 209 delete mRay SceneQuery;180 delete mRayQueryExecutor; 210 181 } 211 182 //----------------------------------------------------------------------- … … 225 196 // Setup the ray scene query 226 197 Ray mouseRay = mCamera->getCameraToViewportRay( e->getX(), e->getY() ); 227 mRaySceneQuery->setRay( mouseRay ); 228 229 // Execute query 230 RaySceneQueryResult &result = mRaySceneQuery->execute(); 231 RaySceneQueryResult::iterator itr = result.begin( ); 232 198 199 Vector3 queryResult; 233 200 // Get results, create a node/entity on the position 234 if ( itr != result.end() && itr->worldFragment)201 if(mRayQueryExecutor->executeRayQuery(&queryResult, mouseRay)) 235 202 { 236 203 char name[16]; 237 204 sprintf( name, "Robot%d", mCount++ ); 238 205 239 Entity *ent = mSceneMgr->createEntity( name, "robot.mesh" ); 240 mCurrentObject = mSceneMgr->getRootSceneNode( )->createChildSceneNode( String(name) + "Node", itr->worldFragment->singleIntersection ); 206 Entity *ent = mSceneMgr->createEntity(name, "robot.mesh"); 207 mCurrentObject = mSceneMgr->getRootSceneNode()-> 208 createChildSceneNode( String(name) + "Node", queryResult); 241 209 mCurrentObject->attachObject( ent ); 242 210 mCurrentObject->setScale( 0.1f, 0.1f, 0.1f ); … … 275 243 if ( mLMouseDown ) 276 244 { 277 Ray mouseRay = mCamera->getCameraToViewportRay( e->getX(), e->getY() ); 278 mRaySceneQuery->setRay( mouseRay ); 279 280 RaySceneQueryResult &result = mRaySceneQuery->execute(); 281 RaySceneQueryResult::iterator itr = result.begin( ); 282 283 if ( itr != result.end() && itr->worldFragment ) 245 Vector3 queryResult; 246 Ray mouseRay = mCamera->getCameraToViewportRay(e->getX(), e->getY()); 247 248 if(mRayQueryExecutor->executeRayQuery(&queryResult, mouseRay)) 284 249 { 285 mCurrentObject->setPosition( itr->worldFragment->singleIntersection);286 } 250 mCurrentObject->setPosition(queryResult); 251 } 287 252 } 288 253 // If we are dragging the right mouse button. … … 297 262 { 298 263 // clamp to terrain 299 Vector3 camPos = mCamera->getPosition( ); 300 Ray cameraRay( Vector3(camPos.x, 5000.0f, camPos.z), Vector3::NEGATIVE_UNIT_Y ); 301 mRaySceneQuery->setRay( cameraRay ); 302 303 // Perform the scene query 304 RaySceneQueryResult &queryResult = mRaySceneQuery->execute(); 305 RaySceneQueryResult::iterator it = queryResult.begin( ); 306 307 if (it != queryResult.end() && it->worldFragment) 264 Vector3 camPos = mCamera->getPosition(); 265 Vector3 queryResult; 266 267 if(mRayQueryExecutor->executeRayQuery(&queryResult, 268 Vector3(camPos.x, 5000.0f, camPos.z), Vector3::NEGATIVE_UNIT_Y)) 308 269 { 309 SceneQuery::WorldFragment* wf = it->worldFragment; 310 311 mCamera->setPosition(mCamera->getPosition().x, wf->singleIntersection.y + 10, 270 mCamera->setPosition(mCamera->getPosition().x, queryResult.y + 10, 312 271 mCamera->getPosition().z); 313 272 } … … 347 306 void MouseQueryListener::changeAlgorithm() 348 307 { 349 //mCurrentAlgorithm = ++mCurrentAlgorithm % VisibilitySceneTraverser::NUM_RENDERMODES; 308 mCurrentAlgorithm = ++mCurrentAlgorithm % 309 GtpVisibility::VisibilityEnvironment::NUM_CULLING_MANAGERS, 350 310 351 311 mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); … … 367 327 mTraversedNodesInfo->setCaption(str); 368 328 369 mSceneMgr->getOption("NumSceneNodes", &opt); sprintf(str,": %d", opt); 370 mSceneNodesInfo->setCaption(str); 371 372 mSceneMgr->getOption("NumOctreeNodes", &opt); sprintf(str,": %d", opt); 329 mSceneMgr->getOption("NumHierarchyNodes", &opt); sprintf(str,": %d", opt); 373 330 mHierarchyNodesInfo->setCaption(str); 374 331
Note: See TracChangeset
for help on using the changeset viewer.