Changeset 135


Ignore:
Timestamp:
06/16/05 18:13:33 (20 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibility/include/VisibilityInfo.h

    r130 r135  
    1616    NodeInfo(HierarchyNode *node,const float v): mNode(node), mVisibility(v) {} 
    1717 
    18         float GetVisibiliy() const {return mVisibility;} 
     18        float GetVisibility() const {return mVisibility;} 
    1919 
    2020protected: 
     
    3434        MeshInfo(Mesh *mesh, const float v): mMesh(mesh), mVisibility(v) {} 
    3535 
    36         float GetVisibiliy() const {return mVisibility;} 
     36        float GetVisibility() const {return mVisibility;} 
    3737 
    3838protected: 
  • trunk/VUT/Ogre/include/OgreTerrainContentGenerator.h

    r130 r135  
    3232 
    3333        /**  
    34                 Generates objects and places it on the terrain 
     34                Generates objects and places it on the terrain. 
    3535        */ 
    3636        SceneNode *GenerateSceneObject(const Vector3 &position,  
    37                 const Vector3 &rotation, const String &objName, const bool clampToTerrain = true); 
     37                const Vector3 &rotation, const String &objName); 
     38        /**  
     39                Generates objects and optionally places it on the terrain. 
     40                @param clampToTerrain if true, scene object is clamped to the terrain 
     41        */ 
     42        SceneNode *GenerateSceneObject(const Vector3 &position,  
     43                const Vector3 &rotation, const String &objName, const bool clampToTerrain); 
    3844         
    3945        /** offset which is added to objects when put into the terrain */ 
  • trunk/VUT/Ogre/resources/VisibilityDemo.overlay

    r121 r135  
    240240} 
    241241 
     242 
    242243Example/Visibility/HelpOverlay 
    243244{ 
    244245        zorder 600 
    245246        // Stats block 
    246         container BorderPanel(Example/Visibility/HelpPanel) 
     247        container BorderPanel(Example/Visibility/Help/HelpPanel) 
    247248        { 
    248249                metrics_mode pixels 
     
    250251                vert_align top 
    251252                width 600 
    252                 height 315 
     253                height 300 
    253254                left 200 
    254255                top 200 
     
    276277                } 
    277278 
    278                 element TextArea(Example/Visibility/Help/Help) 
     279                element TextArea(Example/Visibility/Help/HelpOptions) 
    279280                { 
    280281                        metrics_mode pixels 
     
    293294                { 
    294295                        left 5 
    295                         top 40 
     296                        top 30 
    296297                        width 180 
    297298                        height 30 
     
    301302                { 
    302303                        left 5 
    303                         top 55 
     304                        top 45 
    304305                        width 180 
    305306                        height 30 
     
    309310                { 
    310311                        left 5 
    311                         top 85 
     312                        top 75 
    312313                        width 180 
    313314                        height 30 
     
    317318                { 
    318319                        left 5 
    319                         top 70 
     320                        top 60 
    320321                        width 180 
    321322                        height 30 
     
    325326                { 
    326327                        left 5 
    327                         top 115 
     328                        top 105 
    328329                        width 180 
    329330                        height 30 
     
    333334                { 
    334335                        left 5 
    335                         top 130 
     336                        top 120 
    336337                        width 180 
    337338                        height 30 
     
    342343                { 
    343344                        left 5 
    344                         top 160 
     345                        top 150 
    345346                        width 180 
    346347                        height 30 
     
    350351                { 
    351352                        left 5 
    352                         top 175 
     353                        top 165 
    353354                        width 175 
    354355                        height 30 
     
    358359                { 
    359360                        left 5 
    360                         top 190 
     361                        top 180 
    361362                        width 190 
    362363                        height 30 
     
    366367                { 
    367368                        left 5 
    368                         top 220 
     369                        top 210 
    369370                        width 180 
    370371                        height 30 
     
    374375                { 
    375376                        left 5 
    376                         top 235 
     377                        top 225 
    377378                        width 180 
    378379                        height 30 
     
    382383                { 
    383384                        left 5 
    384                         top 250 
     385                        top 240 
    385386                        width 180 
    386387                        height 30 
     
    390391                { 
    391392                        left 5 
    392                         top 265 
     393                        top 255 
    393394                        width 180 
    394395                        height 30 
     
    398399                { 
    399400                        left 5 
    400                         top 280 
     401                        top 270 
    401402                        width 180 
    402403                        height 30 
     
    405406        } 
    406407} 
     408 
     409Example/Visibility/QueryOverlay 
     410{ 
     411        zorder 650 
     412        // Stats block 
     413        container BorderPanel(Example/Visibility/Query/QueryPanel) 
     414        { 
     415                metrics_mode pixels 
     416                horz_align left 
     417                vert_align top 
     418                width 600 
     419                height 120 
     420                left 200 
     421                top 300 
     422                material Core/StatsBlockCenter 
     423                 
     424                border_size 1 1 1 1 
     425                border_material Core/StatsBlockBorder 
     426                border_topleft_uv     0.0000 1.0000 0.0039 0.9961 
     427                border_top_uv         0.0039 1.0000 0.9961 0.9961 
     428                border_topright_uv    0.9961 1.0000 1.0000 0.9961 
     429                border_left_uv        0.0000 0.9961 0.0039 0.0039 
     430                border_right_uv       0.9961 0.9961 1.0000 0.0039 
     431                border_bottomleft_uv  0.0000 0.0039 0.0039 0.0000 
     432                border_bottom_uv      0.0039 0.0039 0.9961 0.0000 
     433                border_bottomright_uv 0.9961 0.0039 1.0000 0.0000 
     434 
     435                container Panel(Example/Visibility/Query/BreakPanel) 
     436                { 
     437                        metrics_mode pixels 
     438                        left 5  
     439                        top 22 
     440                        width 590 
     441                        height 1 
     442                        material Core/StatsBreak 
     443                } 
     444 
     445                element TextArea(Example/Visibility/Query/Headline) 
     446                { 
     447                        metrics_mode pixels 
     448                        left 5 
     449                        top 5 
     450                        width 90 
     451                        height 30 
     452                        font_name TrebuchetMSBold 
     453                        char_height 19 
     454                        caption Exact Visibility Query 
     455                        colour_top 1 1 0.7 
     456                        colour_bottom 1 1 0.7 
     457                } 
     458 
     459                element TextArea(Example/Visibility/Query/QueryType): Example/Visibility/Templates/BasicText 
     460                { 
     461                        left 5 
     462                        top 30 
     463                        width 90 
     464                        height 30 
     465                        caption Type 
     466                } 
     467                 
     468                 
     469                element TextArea(Example/Visibility/Query/QueryTypeInfo): Example/Visibility/Templates/BasicText 
     470                { 
     471                        left 180 
     472                        top 30 
     473                        width 90 
     474                        height 30 
     475                        caption : 
     476                } 
     477 
     478                element TextArea(Example/Visibility/Query/VisibleNodes): Example/Visibility/Templates/BasicText 
     479                { 
     480                        left 5 
     481                        top 45 
     482                        width 90 
     483                        height 30 
     484                        caption Visible nodes 
     485                } 
     486                element TextArea(Example/Visibility/Query/VisibleNodesInfo): Example/Visibility/Templates/BasicText 
     487                { 
     488                        left 180 
     489                        top 45 
     490                        width 90 
     491                        height 30 
     492                        caption : 
     493                } 
     494 
     495                element TextArea(Example/Visibility/Query/VisibleGeometry): Example/Visibility/Templates/BasicText 
     496                { 
     497                        left 5 
     498                        top 60 
     499                        width 90 
     500                        height 30 
     501                        caption Visible geometry 
     502                } 
     503                element TextArea(Example/Visibility/Query/VisibleGeometryInfo): Example/Visibility/Templates/BasicText 
     504                { 
     505                        left 180 
     506                        top 60 
     507                        width 90 
     508                        height 30 
     509                        caption : 
     510                } 
     511 
     512                element TextArea(Example/Visibility/Query/NodeVisibility): Example/Visibility/Templates/BasicText 
     513                { 
     514                        left 5 
     515                        top 75 
     516                        width 90 
     517                        height 30 
     518                        caption Avg. node visibility 
     519                } 
     520 
     521                element TextArea(Example/Visibility/Query/NodeVisibilityInfo): Example/Visibility/Templates/BasicText 
     522                { 
     523                        left 180 
     524                        top 75 
     525                        width 90 
     526                        height 30 
     527                        caption: 
     528                } 
     529 
     530                element TextArea(Example/Visibility/Query/GeometryVisibility): Example/Visibility/Templates/BasicText 
     531                { 
     532                        left 5 
     533                        top 90 
     534                        width 90 
     535                        height 30 
     536                        caption Avg. geometry visibility 
     537                } 
     538 
     539                element TextArea(Example/Visibility/Query/GeometryVisibilityInfo): Example/Visibility/Templates/BasicText 
     540                { 
     541                        left 180 
     542                        top 90 
     543                        width 90 
     544                        height 30 
     545                        caption: 
     546                } 
     547 
     548        } 
     549} 
  • trunk/VUT/Ogre/src/OgreOctreeHierarchyInterface.cpp

    r130 r135  
    137137        { 
    138138                mPreviousNode = node; 
    139                 static_cast<Octree *>(node)->_getCullBounds(&mBox); 
     139        //      static_cast<Octree *>(node)->_getCullBounds(&mBox); 
     140                mBox = static_cast<Octree *>(node)->_getWorldAABB(); 
    140141        } 
    141142 
  • trunk/VUT/Ogre/src/OgrePlatformHierarchyInterface.cpp

    r133 r135  
    188188        else 
    189189        { 
    190                 // used by the scene manager, because bounding box rendering must be handled 
    191                 // differently 
     190                // this information is used e.g., by the scene graph, because the bounding box 
     191                // must be treated differently to the scene geometry during rendering 
    192192                mIsBoundingBoxQuery = true; 
    193193 
  • trunk/VUT/Ogre/src/OgrePlatformQueryManager.cpp

    r134 r135  
    2525                            bool relativeVisibility) 
    2626{ 
    27         if (relativeVisibility) 
    28                 LogManager::getSingleton().logMessage("relative"); 
    29         else 
    30                 LogManager::getSingleton().logMessage("absolute"); 
    31  
    3227        // we need access to the scene manager and the rendersystem 
    3328        PlatformHierarchyInterface *pfHierarchyInterface =  
     
    3934        Camera *pCam = const_cast<Camera *>(&camera);  
    4035 
     36        bool overlayEnabled = mViewport->getOverlaysEnabled(); 
     37        mViewport->setOverlaysEnabled(false); 
    4138        pfHierarchyInterface->GetSceneManager()->_renderScene(pCam, mViewport, false); 
    4239 
     
    5350        GtpVisibility::GeometryList geometryList; 
    5451         
    55         GtpVisibility::HierarchyNodeList::const_iterator nodeIt, nodeIt_end = nodeList->end(); 
     52        GtpVisibility::HierarchyNodeList::iterator nodeIt, nodeIt_end = nodeList->end(); 
    5653        // geometry list has still do be built 
    5754        GtpVisibility::GeometryList::iterator geometryIt, geometryIt_end; 
    5855 
     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        */ 
    5969        // for relative visibility we need 2 rendering passes 
    6070        int n = relativeVisibility ? 2 : 1; 
     
    6373        { 
    6474                //-- queries for hierarchy nodes 
    65                 for (nodeIt = nodeList->begin(); nodeIt != nodeIt_end; ++nodeIt) 
     75                for (nodeIt = nodeList->begin(); nodeIt != nodeIt_end; ++nodeIt)                 
    6676                { 
    6777                        // TODO: DELETE QUERIES FROM PREVIOUS RENDER 
     
    6979                         
    7080                        // store geometry of the hierarchy node in a geometry list (only once!) 
    71                         if (i == n - 2) 
     81                        if (i == 0) 
    7282                        { 
    7383                                mHierarchyInterface->GetGeometry(*nodeIt, &geometryList, false); 
     
    8393                } 
    8494 
    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); 
    10397        } 
    10498 
     99        enableDepthWrite = true; 
     100        // this option must be provided by the scene manager 
     101        pfHierarchyInterface->GetSceneManager()->setOption("DepthWrite", &enableDepthWrite); 
     102         
     103        mViewport->setOverlaysEnabled(overlayEnabled); 
    105104 
    106105        //---- collect results 
    107         unsigned int visiblePixels; 
     106        unsigned int visiblePixels = 0; 
    108107 
    109108        GtpVisibility::QueryList::iterator visQueryIt, projQueryIt; 
     
    111110        visQueryIt = queryList[0].begin(); 
    112111        projQueryIt = queryList[1].begin(); 
     112 
    113113         
    114114        for (nodeIt = nodeList->begin(); nodeIt != nodeIt_end; ++nodeIt) 
    115115        { 
    116116                (*visQueryIt)->GetQueryResult(visiblePixels, true); 
    117  
     117         
     118                 
    118119                float vis = (float)visiblePixels; 
    119120 
     
    121122                { 
    122123                        (*projQueryIt)->GetQueryResult(visiblePixels, true); 
    123                         std::stringstream d; d << "relativ " << visiblePixels; 
    124                         LogManager::getSingleton().logMessage(d.str()); 
    125  
     124         
    126125                        if (visiblePixels > 0) 
    127126                        {                                
     
    132131 
    133132                ++visQueryIt; 
    134  
     133                 
    135134                // leave nodes with visibilty 0 in queue:  
    136135                // happens if node is intersected by near plane 
     
    141140        geometryIt_end = geometryList.end(); 
    142141         
    143         /*for (geometryIt = geometryList.begin(); geometryIt != geometryIt_end; ++geometryIt) 
     142        for (geometryIt = geometryList.begin(); geometryIt != geometryIt_end; ++geometryIt) 
    144143        { 
    145                 (*absQueryIt)->GetQueryResult(visiblePixels, true); 
     144                (*visQueryIt)->GetQueryResult(visiblePixels, true); 
     145                 
    146146 
    147147                float vis = (float)visiblePixels; 
     
    150150                if (relativeVisibility) 
    151151                { 
    152                         (*relQueryIt)->GetQueryResult(visiblePixels, true); 
     152                        (*projQueryIt)->GetQueryResult(visiblePixels, true); 
    153153 
    154154                        if (visiblePixels) 
     
    156156                                vis /= (float) visiblePixels; 
    157157                        } 
    158                         ++relQueryIt; 
     158                        ++projQueryIt; 
    159159                } 
    160160 
    161                 ++absQueryIt; 
     161                ++visQueryIt; 
    162162 
    163163                // approximate depth ordering during rendering =>  
     
    167167                        visibleGeometry->push_back(GtpVisibility::MeshInfo(*geometryIt, vis)); 
    168168                } 
    169         }*/ 
     169        } 
    170170 
    171171} 
     
    176176                               bool relativeVisibility) 
    177177{ 
    178          visibleNodes->push_back(GtpVisibility::NodeInfo(mHierarchyInterface->GetSceneRoot(), 1.0f)); 
     178         
    179179} 
    180180//----------------------------------------------------------------------- 
  • trunk/VUT/Ogre/src/OgreTerrainContentGenerator.cpp

    r130 r135  
    7070                                         const Vector3 &rotation, const String& objName, const bool clampToTerrain) 
    7171{ 
     72         
     73        if (clampToTerrain) 
     74        { 
     75                return GenerateSceneObject(position, rotation, objName); 
     76        } 
     77        else 
     78        { 
     79                return SceneContentGenerator::GenerateSceneObject(position, rotation, objName); 
     80        } 
     81} 
     82//----------------------------------------------------------------------- 
     83SceneNode *TerrainContentGenerator::GenerateSceneObject(const Vector3 &position,  
     84                                         const Vector3 &rotation, const String& objName) 
     85{ 
    7286        Vector3 queryResult; 
    7387        // set y to max height so we are sure to be over terrain 
    7488        Vector3 pos(position.x, MAX_HEIGHT, position.z); 
    75  
    76         if (!clampToTerrain) 
    77         { 
    78                 return SceneContentGenerator::GenerateSceneObject(queryResult, rotation, objName); 
    79         } 
    8089 
    8190        if (mRayQueryExecutor->executeRayQuery(&queryResult, position, Vector3::NEGATIVE_UNIT_Y)) 
  • trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp

    r134 r135  
    274274        TerrainSceneManager::_renderVisibleObjects(); 
    275275 
    276  
    277276#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
    278277        _deleteRenderedQueueGroups(false); 
     
    300299        mVisibilityManager->ApplyVisibilityCulling(); 
    301300 
     301        // delete remaining renderables from queue (or all but transparents) 
     302#ifdef GTP_VISIBILITY_MODIFIED_OGRE 
     303        _deleteRenderedQueueGroups(mSkipTransparents); 
     304#endif 
    302305 
    303306        // for depth pass: add visible nodes found with the visibility culling 
     
    320323 
    321324        TerrainRenderable::setCurrentRenderLevelIndex(renderLevel); 
     325        getRenderQueue()->clear(); 
    322326        //WriteLog(); // write out stats 
    323327} 
  • 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.