Changeset 135 for trunk/VUT/Ogre/src


Ignore:
Timestamp:
06/16/05 18:13:33 (19 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/Ogre/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • 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} 
Note: See TracChangeset for help on using the changeset viewer.