Ignore:
Timestamp:
05/01/05 23:29:27 (19 years ago)
Author:
mattausch
Message:

added support for release mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/work/TestCullingTerrain/TestCullingTerrainApplication.cpp

    r61 r74  
    33        TestCullingTerrainApplication.cpp 
    44    \brief 
    5         Tests the occlusion culling algorithm 
     5        Tests the visibility culling algorithm 
    66*/ 
    77 
     
    4444} 
    4545//----------------------------------------------------------------------- 
    46 void TestCullingTerrainApplication::generateSceneObject(const Vector3 &translationRatio,  
    47                                          const Vector3 &rotationRatio, const int idx, const String& entName) 
    48 { 
    49         // Setup the ray scene query 
    50         /*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 query 
    58         RaySceneQueryResult &result = mRaySceneQuery->execute(); 
    59         RaySceneQueryResult::iterator itr = result.begin( ); 
    60  
    61         // Get results, create a node/entity on the position 
    62         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 //----------------------------------------------------------------------- 
    7546void TestCullingTerrainApplication::createScene( void ) 
    7647{ 
    7748        mRayQueryExecutor = new RayQueryExecutor(mSceneMgr); 
    7849        mTerrainContentGenerator = new TerrainContentGenerator(mSceneMgr, mRayQueryExecutor); 
     50 
    7951        // Set ambient light 
    8052        mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); 
     
    11183        terrain_cfg = mResourcePath + terrain_cfg; 
    11284#endif 
    113         mSceneMgr -> setWorldGeometry( terrain_cfg ); 
     85        mSceneMgr->setWorldGeometry(terrain_cfg); 
    11486        // Infinite far plane? 
    11587        if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE)) 
     
    12496        // CEGUI setup 
    12597        setupGui(); 
     98 
     99        mTerrainContentGenerator->generateScene(100); 
    126100} 
    127101//----------------------------------------------------------------------- 
     
    149123void TestCullingTerrainApplication::chooseSceneManager(void) 
    150124{ 
    151     //mSceneMgr = mRoot->getSceneManager(ST_GENERIC); 
    152125        mSceneMgr = mRoot->getSceneManager(ST_EXTERIOR_CLOSE); 
    153126} 
     
    171144        mRotateSpeed *= 2; 
    172145 
    173         mCurrentAlgorithm = 0;//VisibilitySceneTraverser::RENDER_COHERENT; 
     146        mCurrentAlgorithm = GtpVisibility::VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING, 
    174147        mThreshold = 0; 
    175148     
     
    179152        mEventProcessor->addKeyListener(this); 
    180153 
    181         mRaySceneQuery = mSceneMgr->createRayQuery(Ray()); 
     154        mRayQueryExecutor = new RayQueryExecutor(mSceneMgr); 
    182155 
    183156        // show overlay 
    184157        Overlay* pOver = OverlayManager::getSingleton().getByName("Example/VisibilityDemoOverlay");  
    185158 
    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"); 
    194166 
    195167        mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
     
    198170        mQueryCulledNodesInfo->setCaption(": 0"); 
    199171        mTraversedNodesInfo->setCaption(": 0"); 
    200         mSceneNodesInfo->setCaption(": 0"); 
    201172        mHierarchyNodesInfo->setCaption(": 0"); 
    202173        mRenderedNodesInfo->setCaption(": 0"); 
     
    207178MouseQueryListener::~MouseQueryListener( ) 
    208179{ 
    209         delete mRaySceneQuery; 
     180        delete mRayQueryExecutor; 
    210181} 
    211182//----------------------------------------------------------------------- 
     
    225196                 // Setup the ray scene query 
    226197         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; 
    233200         // Get results, create a node/entity on the position 
    234          if ( itr != result.end() && itr->worldFragment ) 
     201                 if(mRayQueryExecutor->executeRayQuery(&queryResult, mouseRay)) 
    235202         { 
    236203                         char name[16]; 
    237204             sprintf( name, "Robot%d", mCount++ ); 
    238205 
    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); 
    241209             mCurrentObject->attachObject( ent ); 
    242210             mCurrentObject->setScale( 0.1f, 0.1f, 0.1f ); 
     
    275243         if ( mLMouseDown ) 
    276244     { 
    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)) 
    284249                 { 
    285                          mCurrentObject->setPosition( itr->worldFragment->singleIntersection ); 
    286                  }  
     250                         mCurrentObject->setPosition(queryResult); 
     251                 } 
    287252     } 
    288253         // If we are dragging the right mouse button. 
     
    297262{ 
    298263        // 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)) 
    308269        { 
    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,  
    312271                        mCamera->getPosition().z); 
    313272        } 
     
    347306void MouseQueryListener::changeAlgorithm() 
    348307{ 
    349     //mCurrentAlgorithm = ++mCurrentAlgorithm % VisibilitySceneTraverser::NUM_RENDERMODES; 
     308        mCurrentAlgorithm = ++mCurrentAlgorithm %  
     309                GtpVisibility::VisibilityEnvironment::NUM_CULLING_MANAGERS, 
    350310 
    351311        mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
     
    367327        mTraversedNodesInfo->setCaption(str); 
    368328 
    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);  
    373330        mHierarchyNodesInfo->setCaption(str); 
    374331 
Note: See TracChangeset for help on using the changeset viewer.