Changeset 135 for trunk/VUT/work


Ignore:
Timestamp:
06/16/05 18:13:33 (20 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/work
Files:
7 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); 
  • trunk/VUT/work/ogre_changes/OgreMain/src/OgreSceneManager.cpp

    r131 r135  
    779779void SceneManager::_renderScene(Camera* camera, Viewport* vp, bool includeOverlays) 
    780780{ 
    781         LogManager::getSingleton().logMessage("***********RENDER SCENE************"); 
    782     Root::getSingleton()._setCurrentSceneManager(this); 
     781        Root::getSingleton()._setCurrentSceneManager(this); 
    783782    // Prep Pass for use in debug shadows 
    784783    initShadowVolumeMaterials(); 
     
    42004199void SceneManager::_renderSceneNode(Camera *cam, SceneNode *node, bool leaveTransparentsInQueue) 
    42014200{ 
     4201        // delete previously rendered objects from renderqueue 
     4202        _deleteRenderedQueueGroups(leaveTransparentsInQueue); 
     4203 
    42024204        node->_findVisibleObjects(cam, getRenderQueue(), false, mDisplayNodes, false); 
    42034205        SceneManager::_renderVisibleObjects(); 
    4204  
    4205         // delete all rendered objects from renderqueue 
    4206         _deleteRenderedQueueGroups(leaveTransparentsInQueue); 
    42074206} 
    42084207//----------------------------------------------------------------------- 
     
    42484247void SceneManager::_renderMovableObject(MovableObject *mov, const bool leaveTransparentsInQueue) 
    42494248{ 
     4249        // delete previously rendered objects from renderqueue 
     4250        _deleteRenderedQueueGroups(leaveTransparentsInQueue); 
     4251 
    42504252        mov->_updateRenderQueue(getRenderQueue()); 
    42514253        SceneManager::_renderVisibleObjects(); 
    4252          
    4253         // delete rendered objects from renderqueue 
    4254         //TODO: should be first 
    4255         _deleteRenderedQueueGroups(leaveTransparentsInQueue); 
    42564254} 
    42574255#endif //GTP_VISIBILITY_MODIFIED_OGRE 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/include/OgreOctree.h

    r104 r135  
    157157 
    158158#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    159         public: 
    160                 /** Returns last visited frame id. */ 
    161                 int lastVisited(void); 
    162                 /** Set to current frame id. 
    163         @param current frame id. 
    164         */ 
    165                 void setLastVisited(int frameid); 
    166                 /** Makes this octree become visible / invisble. 
    167         @param visible Whether this node is to be made visible or invisible 
    168         */ 
    169                 void setOctreeVisible(bool visible); 
    170                 /** Returns true if this node is marked visible, false otherwise.  
    171                 */ 
    172                 bool isOctreeVisible(void); 
    173                 /** Gets this node's parent (NULL if this is the root). 
    174                 */ 
    175                 Octree *getParent(); 
    176                 /** Frame id when this octree was last rendered.  
    177                 @return last rendered frame id 
    178                 */       
    179                 int lastRendered(void); 
    180                 /** Sets frame id when this octree was last rendered.  
    181                 @param last rendered frame id 
    182                 */ 
    183                 void setLastRendered(int frameid); 
    184                 /** Returns current depth of octree  
    185                 @return current depth 
    186                 */ 
    187                 int getDepth(); 
    188  
    189         protected: 
    190  
    191                 int mLastRendered; 
    192                 int mLastVisited; 
    193                 bool mVisible; 
    194                 int mDepth; 
     159public: 
     160        /** Returns last visited frame id. */ 
     161        int lastVisited(void); 
     162        /** Set to current frame id. 
     163    @param current frame id. 
     164    */ 
     165        void setLastVisited(int frameid); 
     166        /** Makes this octree become visible / invisble. 
     167    @param visible Whether this node is to be made visible or invisible 
     168    */ 
     169        void setOctreeVisible(bool visible); 
     170        /** Returns true if this node is marked visible, false otherwise.  
     171        */ 
     172        bool isOctreeVisible(void); 
     173        /** Gets this node's parent (NULL if this is the root). 
     174        */ 
     175        Octree *getParent(); 
     176        /** Frame id when this octree was last rendered.  
     177        @return last rendered frame id 
     178        */       
     179        int lastRendered(void); 
     180        /** Sets frame id when this octree was last rendered.  
     181        @param last rendered frame id 
     182        */ 
     183        void setLastRendered(int frameid); 
     184        /** Returns current depth of octree  
     185        @return current depth 
     186        */ 
     187        int getDepth(); 
     188        /** Returns real extent of the octree, i.e., the merged extent of the bounding boxes. */ 
     189        AxisAlignedBox _getWorldAABB(void) const; 
     190 
     191        /** Updates bounds of real aabb of octree. */ 
     192        void _updateBounds(); 
     193 
     194protected: 
     195         
     196        /** the real extent of the octree. */ 
     197        AxisAlignedBox mWorldAABB; 
     198 
     199        int mLastRendered; 
     200        int mLastVisited; 
     201        bool mVisible; 
     202        int mDepth; 
    195203 
    196204#endif // GTP_VISIBILITY_MODIFIED_OGRE 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/src/OgreOctree.cpp

    r115 r135  
    142142    _ref(); 
    143143 
     144#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     145        _updateBounds(); 
     146#endif 
     147 
    144148} 
    145149 
     
    151155    //update total counts. 
    152156    _unref(); 
     157 
     158#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     159        _updateBounds(); 
     160#endif 
    153161} 
    154162 
     
    165173        mWireBoundingBox = new WireBoundingBox(); 
    166174 
    167         mWireBoundingBox->setupBoundingBox(mBox); 
     175        //mWireBoundingBox->setupBoundingBox(mBox); 
     176        mWireBoundingBox->setupBoundingBox(mWorldAABB); 
    168177    return mWireBoundingBox; 
    169178} 
     
    171180#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    172181//-----------------------------------------------------------------------        
    173 int Octree::lastVisited(void) 
     182int Octree::lastVisited() 
    174183{ 
    175184        return mLastVisited; 
     
    181190} 
    182191//-----------------------------------------------------------------------        
    183 int Octree::lastRendered(void) 
     192int Octree::lastRendered() 
    184193{ 
    185194        return mLastRendered; 
     
    196205} 
    197206//-----------------------------------------------------------------------        
    198 bool Octree::isOctreeVisible(void) 
     207bool Octree::isOctreeVisible() 
    199208{ 
    200209        return mVisible; 
     
    210219        return mDepth; 
    211220} 
     221//-----------------------------------------------------------------------        
     222AxisAlignedBox Octree::_getWorldAABB(void) const 
     223{ 
     224        return mWorldAABB; 
     225} 
     226//----------------------------------------------------------------------- 
     227void Octree::_updateBounds() 
     228{ 
     229        // Reset bounds first 
     230    mWorldAABB.setNull(); 
     231 
     232    // Update bounds from own attached objects 
     233        NodeList::iterator it, it_end; 
     234        it_end = mNodes.end(); 
     235 
     236    for (it = mNodes.begin(); it != it_end; ++it) 
     237    { 
     238        // Merge world bounds of each object 
     239                mWorldAABB.merge((*it)->_getWorldAABB()); 
     240    } 
     241 
     242    // Merge with children 
     243        for (int i = 0; i < 2; ++i) 
     244    { 
     245        for (int j = 0; j < 2; ++j) 
     246        { 
     247            for (int k = 0; k < 2; ++k) 
     248            { 
     249                if (mChildren[i][j][k] != 0) 
     250                                { 
     251                                        mWorldAABB.merge(mChildren[i][j][k]->_getWorldAABB()); 
     252                                } 
     253            } 
     254        } 
     255        } 
     256        // recursively update parent bounds 
     257        if (mParent) 
     258        { 
     259                mParent->_updateBounds(); 
     260        } 
     261 } 
    212262#endif //GTP_VISIBILITY_MODIFIED_OGRE 
    213263} 
  • trunk/VUT/work/ogre_changes/Plugins/OctreeSceneManager/src/OgreOctreeSceneManager.cpp

    r115 r135  
    428428            _addOctreeNode( onode, mOctree ); 
    429429    } 
     430#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     431        else // still update because bounding box may be different 
     432        { 
     433                onode -> getOctant() -> _updateBounds(); 
     434        } 
     435#endif // GTP_VISIBILITY_MODIFIED_OGRE 
    430436} 
    431437 
     
    11721178                                                                           bool leaveTransparentsInQueue)//, bool useZPassQueue) 
    11731179{ 
     1180        // delete previously rendered objects from the render queue 
     1181        _deleteRenderedQueueGroups(leaveTransparentsInQueue); 
     1182 
    11741183        //Add stuff to be rendered; 
    11751184    NodeList::iterator it = octant->mNodes.begin(); 
     
    12111220        //-- the actual rendering 
    12121221        SceneManager::_renderVisibleObjects(); 
    1213         // delete all rendered objects from the render queue 
    1214         _deleteRenderedQueueGroups(leaveTransparentsInQueue); 
    12151222} 
    12161223#endif // GTP_VISIBILITY_MODIFIED_OGRE 
Note: See TracChangeset for help on using the changeset viewer.