Ignore:
Timestamp:
06/16/05 18:13:33 (19 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/work/TestCullingTerrain
Files:
3 edited

Legend:

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

    r133 r135  
    1616 
    1717 
    18 String mCurrentAlgorithmCaptions[GtpVisibility::VisibilityEnvironment::NUM_CULLING_MANAGERS] =  
    19 { 
    20     "View Frustum Culling",  
     18String currentAlgorithmCaptions[GtpVisibility::VisibilityEnvironment::NUM_CULLING_MANAGERS] =  
     19{ 
     20        "View Frustum Culling",  
    2121        "Stop and Wait Culling",  
    2222        "Coherent Hierarchical Culling" 
    2323}; 
    2424 
     25String queryTypeCaptions[4] =  
     26{ 
     27        "from camera, visible pixels",  
     28        "from viewpoint, visible pixels",  
     29        "from camera, relative visibility", 
     30        "from viewpoint, relative visibility" 
     31}; 
    2532 
    2633//----------------------------------------------------------------------- 
     
    7380mVisualizeCulledNodes(false), 
    7481mSunLight(sunLight), 
    75 mShiftPressed(false) 
     82mShiftPressed(false), 
     83mShowQueryStats(false) 
    7684{ 
    7785        //mInputDevice = PlatformManager::getSingleton().createInputReader(); 
    78          
    7986        //mInputDevice->initialise(win, true, true); 
     87 
    8088        mEventProcessor = new EventProcessor(); 
    8189         
     
    94102        mHelpOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/HelpOverlay");  
    95103        mDebugOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay"); 
    96  
     104        mQueryOverlay = OverlayManager::getSingleton().getByName("Example/Visibility/QueryOverlay");  
    97105 
    98106        //-- visibility culling stats overlay 
     
    112120        mQueriesIssuedInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/QueriesIssuedInfo"); 
    113121         
    114         mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
     122        mAlgorithmInfo->setCaption(": " + currentAlgorithmCaptions[mCurrentAlgorithm]); 
    115123        mThresholdInfo->setCaption(": 0"); 
    116124        mFrustumCulledNodesInfo->setCaption(": 0"); 
     
    124132        mQueriesIssuedInfo->setCaption(": 0"); 
    125133 
     134 
     135        //-- visibility query stats overlay 
     136        mQueryTypeInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/Query/QueryTypeInfo"); 
     137        mQueryVisibleNodesInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/Query/VisibleNodesInfo"); 
     138    mQueryVisibleGeometryInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/Query/VisibleGeometryInfo"); 
     139        mQueryNodeVisibilityInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/Query/NodeVisibilityInfo"); 
     140        mQueryGeometryVisibilityInfo = OverlayManager::getSingleton().getOverlayElement("Example/Visibility/Query/GeometryVisibilityInfo"); 
     141 
    126142        // show stats overlays 
    127143        showStats(true); 
     
    145161        mSceneMgr->setOption("ShowVisualization", &mShowVisualization); 
    146162 
    147         // TODO: change this 
     163        // TODO: change this (does not work with other scene manager plugins) 
    148164        mVisibilityManager = dynamic_cast<VisibilityTerrainSceneManager *>(mSceneMgr)-> 
    149165                GetVisibilityManager(); 
     
    155171TerrainFrameListener::~TerrainFrameListener() 
    156172{ 
    157         //PlatformManager::getSingleton().destroyInputReader(mInputDevice); 
    158      
    159173        delete mRayQueryExecutor; 
    160174        delete mEventProcessor; 
     
    182196                 // Get results, create a node/entity on the position 
    183197                 mCurrentObject = mTerrainContentGenerator->GenerateSceneObject( 
    184                          mouseRay.getOrigin(), Vector3::ZERO, "robot", false); 
     198                         mouseRay.getOrigin(), Vector3::ZERO, "robot"); 
    185199                 
    186200         mLMouseDown = true;  
     
    341355        if (fromPoint) 
    342356        { 
     357                Vector3 point; 
     358                mVisibilityManager->GetQueryManager()-> 
     359                ComputeFromPointVisibility(point, &visibleNodes, &visibleGeometry, relativeVisibility); 
    343360        } 
    344361        else 
     
    348365        } 
    349366 
     367        float averageNodeVis = 0; 
     368        float averageGeometryVis = 0; 
     369 
    350370        for (int i=0; i < visibleGeometry.size(); ++i) 
    351371        { 
    352                 std::stringstream d; d << "Geometry visibility: " << visibleGeometry[i].GetVisibiliy(); 
     372                averageGeometryVis += visibleGeometry[i].GetVisibility(); 
     373 
     374                std::stringstream d; d << "Geometry visibility: " << visibleGeometry[i].GetVisibility(); 
    353375                LogManager::getSingleton().logMessage(d.str()); 
    354376        } 
    355377        for (int i=0; i < visibleNodes.size(); ++i) 
    356378        { 
    357                 std::stringstream d; d << "Node visibility: " << visibleNodes[i].GetVisibiliy(); 
     379                averageNodeVis += visibleNodes[i].GetVisibility(); 
     380 
     381                std::stringstream d; d << "Node visibility: " << visibleNodes[i].GetVisibility(); 
    358382                LogManager::getSingleton().logMessage(d.str()); 
    359383        } 
    360384 
     385        averageNodeVis /= (float)visibleNodes.size(); 
     386        averageGeometryVis /= (float)visibleGeometry.size(); 
     387 
     388        char str[100]; 
     389 
     390        //-- update visibility queries stats 
     391    try  
     392        { 
     393                //-- visibility queries stats 
     394                int idx = fromPoint ?  1 : 0; 
     395                idx += relativeVisibility ? 2 : 0; 
     396 
     397                sprintf(str, ": %s", queryTypeCaptions[idx].c_str());  
     398                mQueryTypeInfo->setCaption(str); 
     399 
     400                sprintf(str, ": %d", (int)visibleNodes.size());  
     401                mQueryVisibleNodesInfo->setCaption(str); 
     402         
     403                sprintf(str,": %d", (int)visibleGeometry.size());  
     404                mQueryVisibleGeometryInfo->setCaption(str); 
     405                 
     406                sprintf(str,": %3.3f", averageNodeVis);  
     407                mQueryNodeVisibilityInfo->setCaption(str); 
     408 
     409                sprintf(str,": %3.3f", averageGeometryVis);  
     410                mQueryGeometryVisibilityInfo->setCaption(str); 
     411        } 
     412        catch (...) 
     413        { 
     414                // ignore 
     415        } 
     416 
     417        // show the results 
     418        if (!mShowQueryStats) 
     419        { 
     420                mQueryOverlay->show(); 
     421                mShowQueryStats = true; 
     422        } 
    361423} 
    362424//----------------------------------------------------------------------- 
     
    399461 
    400462        it_end = mFrameInfo.end(); 
    401         for(it = mFrameInfo.begin(); it < it_end; ++it) 
     463        for (it = mFrameInfo.begin(); it < it_end; ++it) 
    402464        { 
    403465                ofstr << StringConverter::toString((*it).position) << " "  
     
    422484                ifstr.getline(line, 256); 
    423485                sscanf(line, "%f %f %f %f %f %f %f %f", &info.position.x, &info.position.y, &info.position.z, 
    424                                 &info.orientation.w, &info.orientation.x, &info.orientation.y, &info.orientation.z, 
    425                                 &info.timeElapsed); 
     486                           &info.orientation.w, &info.orientation.x, &info.orientation.y, &info.orientation.z, 
     487                           &info.timeElapsed); 
    426488                 
    427489                mFrameInfo.push_back(info); 
     
    447509                //-- write out stats for recorded walkthrough 
    448510                std::stringstream d; 
    449                 d << "Algorithm: " << mCurrentAlgorithmCaptions[mCurrentAlgorithm] << "\n" 
     511                d << "Algorithm: " << currentAlgorithmCaptions[mCurrentAlgorithm] << "\n" 
    450512                  << "avg. FPS: " << mWindow->getAverageFPS() << "\n" 
    451513                  << "best FPS: " << mWindow->getBestFPS() << "\n" 
     
    532594void TerrainFrameListener::setAlgorithm(int algorithm) 
    533595{ 
    534         mAlgorithmInfo->setCaption(": " + mCurrentAlgorithmCaptions[mCurrentAlgorithm]); 
     596        mAlgorithmInfo->setCaption(": " + currentAlgorithmCaptions[mCurrentAlgorithm]); 
    535597        mSceneMgr->setOption("Algorithm", &mCurrentAlgorithm); 
    536598} 
     
    548610 
    549611        // update stats when necessary 
    550     try { 
     612    try  
     613        { 
    551614                OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Core/AverageFps"); 
    552615                OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Core/CurrFps"); 
     
    591654                mObjectsInfo->setCaption(str); 
    592655        } 
    593         catch(...) 
    594         { 
    595             // ignore 
     656        catch (...) 
     657        { 
     658                // ignore 
    596659        } 
    597660} 
     
    787850 
    788851        case KC_LSHIFT: 
    789                 mShiftPressed = !mShiftPressed; 
     852                mShiftPressed = true; 
    790853                break; 
    791854        //KEY_PRESSED(KC_F3, 0.3, writeFrames()); 
     
    798861    { 
    799862        // Print camera details 
    800         mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) + " " +  
    801             "O: " + StringConverter::toString(mCamera->getDerivedOrientation())); 
     863        mWindow->setDebugText("P: " + StringConverter::toString(mCamera->getDerivedPosition()) +  
     864                        " " + "O: " + StringConverter::toString(mCamera->getDerivedOrientation())); 
    802865    } 
    803866 
     
    809872void TerrainFrameListener::keyReleased(KeyEvent* e) 
    810873{ 
     874        if (e->getKey() == KC_LSHIFT) 
     875        { 
     876                mShiftPressed = false; 
     877        } 
     878         
    811879        CEGUI::System::getSingleton().injectKeyUp(e->getKey()); 
    812880        e->consume(); 
     
    867935bool TerrainFrameListener::processUnbufferedKeyInput(const FrameEvent& evt) 
    868936{ 
    869         /*if (mInputDevice->isKeyDown(KC_ESCAPE)) 
    870     {             
    871         return false; 
    872     }*/ 
    873  
     937        bool cursorPressed = false; 
     938         
    874939        /* Move camera forward by keypress. */ 
    875940    if (mInputDevice->isKeyDown(KC_UP)) 
    876941        { 
    877942                mTranslateVector.z = -mMoveScale; 
    878         } 
    879  
     943                cursorPressed = true; 
     944        } 
    880945    /* Move camera backward by keypress. */ 
    881946    if (mInputDevice->isKeyDown(KC_DOWN)) 
    882947    { 
    883948                mTranslateVector.z = mMoveScale; 
     949                cursorPressed = true; 
    884950    } 
    885951 
     
    887953    { 
    888954        mCamNode->yaw(-mRotScale); 
     955                cursorPressed = true; 
    889956    } 
    890957         
     
    892959    { 
    893960        mCamNode->yaw(mRotScale); 
     961                cursorPressed = true; 
    894962    } 
    895963        // visualization camera 
     
    903971        } 
    904972 
     973        // show the results 
     974        if (cursorPressed && mShowQueryStats) 
     975        { 
     976                mQueryOverlay->hide(); 
     977                mShowQueryStats = false; 
     978        } 
    905979 
    906980    // Return true to continue rendering 
  • trunk/VUT/work/TestCullingTerrain/TerrainFrameListener.h

    r133 r135  
    121121        */ 
    122122        void ApplyVisibilityQuery(bool fromPoint, bool relativeVisibility); 
     123 
     124        void toggleShowQueryStats(); 
    123125 
    124126protected: 
     
    156158        OverlayElement *mObjectsInfo; 
    157159        OverlayElement *mQueriesIssuedInfo; 
     160 
     161        OverlayElement *mQueryTypeInfo; 
     162        OverlayElement *mQueryVisibleNodesInfo; 
     163    OverlayElement *mQueryVisibleGeometryInfo; 
     164        OverlayElement *mQueryVisiblityInfo; 
     165        OverlayElement *mQueryNodeVisibilityInfo; 
     166        OverlayElement *mQueryGeometryVisibilityInfo; 
    158167 
    159168        RayQueryExecutor *mRayQueryExecutor; 
     
    173182        bool mShutdownRequested; 
    174183        bool mDisplayCameraDetails; 
    175  
     184         
    176185        Real mVizCameraHeight; 
    177186 
     
    208217        Overlay* mHelpOverlay; 
    209218        Overlay* mCullStatsOverlay; 
     219        Overlay* mQueryOverlay; 
    210220 
    211221        Light *mSunLight; 
     
    214224         
    215225        bool mShiftPressed; 
     226        bool mShowQueryStats; 
     227 
    216228        //bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn; 
    217229}; 
  • trunk/VUT/work/TestCullingTerrain/TestCullingTerrainApplication.cpp

    r133 r135  
    162162        if (!mTerrainContentGenerator->LoadObjects("objects.out")) 
    163163        { 
    164                 // height is restricted to 50, so no objects appear on peaks  
    165                 // => there is much occlusion 
     164                // to provide much occlusion, 
     165                // height is restricted to 50, so no objects appear on peaks 
    166166                mTerrainContentGenerator->SetMaxPos(Vector3(3000.0f, 50.0f, 3000.0f)); 
    167167                mTerrainContentGenerator->SetOffset(0); 
Note: See TracChangeset for help on using the changeset viewer.