Changeset 130 for trunk/VUT/Ogre/src


Ignore:
Timestamp:
06/14/05 02:50:05 (19 years ago)
Author:
mattausch
Message:

added visibility queries

Location:
trunk/VUT/Ogre/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/Ogre/src/OgreOctreeHierarchyInterface.cpp

    r115 r130  
    99 
    1010//----------------------------------------------------------------------- 
    11 OctreeHierarchyInterface::OctreeHierarchyInterface(SceneManager *sm, RenderSystem *rsys):  
    12 PlatformHierarchyInterface(sm, rsys) 
     11OctreeHierarchyInterface::OctreeHierarchyInterface(OctreeSceneManager *sm, RenderSystem *rsys):  
     12SceneNodeHierarchyInterface(sm, rsys) 
    1313{ 
    1414} 
     
    106106                octant->setLastRendered(mFrameId); 
    107107 
    108                 static_cast<OctreeSceneManager *>(mSceneManager)->_renderOctant(mCamera,  
     108                dynamic_cast<OctreeSceneManager *>(mSceneManager)->_renderOctant(mCamera,  
    109109                        octant, mOnlyShadowCasters, mLeaveTransparentsInQueue); 
    110110 
    111                 mNumRenderedNodes ++; 
     111                mRenderedNodes.push_back(node); 
    112112        } 
    113113#endif 
     
    157157        } 
    158158 
    159         static_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box); 
    160 } 
     159        dynamic_cast<OctreeSceneManager *>(mSceneManager)->getBoxes()->push_back(box); 
     160} 
     161//----------------------------------------------------------------------- 
     162void OctreeHierarchyInterface::GetGeometry(GtpVisibility::HierarchyNode *node,   
     163                                                                                   GtpVisibility::GeometryList *geometryList,  
     164                                                                                   bool includeChildren) 
     165{ 
     166        NodeList::const_iterator nodeIt, nodeIt_end; 
     167        nodeIt_end = static_cast<Octree *>(node)->mNodes.end(); 
     168 
     169        for (nodeIt = static_cast<Octree *>(node)->mNodes.begin(); nodeIt != nodeIt_end; ++nodeIt) 
     170        { 
     171                SceneNodeHierarchyInterface::GetGeometry(*nodeIt, geometryList, includeChildren); 
     172        } 
     173} 
     174//----------------------------------------------------------------------- 
     175/*bool OctreeHierarchyInterface::FindVisibleObjects(GtpVisibility::HierarchyNode *node,  
     176                                                                        InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry,  
     177                                                                        bool includeChildren) 
     178{ 
     179        bool foundVisible = false; 
     180 
     181        PlatformOcclusionQuery query(mRenderSystem); 
     182 
     183        NodeList *nodes = &static_cast<Octree *>(node)->mNodes; 
     184         
     185        NodeList::const_iterator nodeIt = nodes->begin(), nodeIt_end; 
     186         
     187        nodeIt_end = nodes->end(); 
     188 
     189        while (nodeIt != nodeIt_end) 
     190        { 
     191                OctreeNode *octreeNode = (*nodeIt); 
     192                if (SceneNodeHierarchyInterface::FindVisibleObjects(octreeNode, visibleGeometry, includeChildren)) 
     193                { 
     194                        foundVisible = true; 
     195                } 
     196                ++nodeIt; 
     197        } 
     198 
     199        return foundVisible; 
     200}*/ 
     201 
    161202} // namespace Ogre 
  • trunk/VUT/Ogre/src/OgrePlatformHierarchyInterface.cpp

    r122 r130  
    11#include <OgreCamera.h> 
    22#include <OgreLogManager.h> 
     3#include <OgreSubEntity.h> 
     4#include <OgreEntity.h> 
     5#include <OgreMovableObject.h> 
    36#include "OgreSolidBoundingBox.h" 
    47#include "OgrePlatformHierarchyInterface.h" 
     
    138141        mCullCamera = cullCam ? cullCam : cam; 
    139142 
    140         if (mCullCamera != mCamera) 
    141                 LogManager::getSingleton().logMessage("cullcamera is not camera!"); 
     143        //if (mCullCamera != mCamera) 
     144        //      LogManager::getSingleton().logMessage("cullcamera is not camera"); 
    142145 
    143146        // create materials for node visualization 
     
    186189        { 
    187190                mIsBoundingBoxQuery = true; 
     191 
    188192                //LogManager::getSingleton().logMessage("render box\n"); 
    189193                RenderBoundingBox(GetBoundingBox(node)); 
     
    197201} 
    198202//----------------------------------------------------------------------- 
    199 void PlatformHierarchyInterface::SetOcclusionPass() 
     203GtpVisibility::OcclusionQuery *PlatformHierarchyInterface::IssueOcclusionQuery(GtpVisibility::Mesh *mesh) 
     204{ 
     205        // get next available test id 
     206        GtpVisibility::OcclusionQuery *query = GetNextOcclusionQuery(); 
     207 
     208        //-- the actual query test 
     209        query->BeginQuery(); 
     210         
     211        RenderGeometry(mesh); 
     212 
     213        query->EndQuery(); 
     214 
     215        return query; 
     216} 
     217//----------------------------------------------------------------------- 
     218/*void PlatformHierarchyInterface::SetOcclusionPass() 
    200219{ 
    201220    // disable vertex and fragment program 
     
    215234        // Set colour write mode off 
    216235        mRenderSystem->_setColourBufferWriteEnabled(false, false, false, false); 
    217 } 
     236}*/ 
    218237//----------------------------------------------------------------------- 
    219238SolidBoundingBox *PlatformHierarchyInterface::GetSolidBoundingBox() 
     
    228247{ 
    229248        mOnlyShadowCasters = onlyShadowCasters; 
    230         //mIsShadowPass = mOnlyShadowCasters ; 
    231249} 
    232250//----------------------------------------------------------------------- 
     
    245263        return mIsBoundingBoxQuery; 
    246264} 
     265//----------------------------------------------------------------------- 
     266void PlatformHierarchyInterface::RenderGeometry(GtpVisibility::Mesh *geom) 
     267{ 
     268        mSceneManager->_renderMovableObject(geom, mLeaveTransparentsInQueue); 
     269} 
     270//----------------------------------------------------------------------- 
     271SceneManager *PlatformHierarchyInterface::GetSceneManager() 
     272{ 
     273        return mSceneManager; 
     274} 
     275//----------------------------------------------------------------------- 
     276RenderSystem *PlatformHierarchyInterface::GetRenderSystem() 
     277{ 
     278        return mRenderSystem; 
     279} 
    247280} // namespace Ogre 
  • trunk/VUT/Ogre/src/OgreSceneContentGenerator.cpp

    r121 r130  
    186186        return true; 
    187187} 
     188 
    188189} // namespace Ogre 
  • trunk/VUT/Ogre/src/OgreSceneNodeHierarchyInterface.cpp

    r115 r130  
    1 #include "OgreSceneNodeHierarchyInterface.h" 
    21#include <OgreIteratorWrappers.h> 
    32#include <OgreCamera.h> 
    43#include <OgreSceneNode.h> 
     4#include <OgreEntity.h> 
     5#include <OgreSubEntity.h> 
     6#include <OgreLogManager.h> 
     7#include "OgreSceneNodeHierarchyInterface.h" 
     8#include "OgrePlatformOcclusionQuery.h" 
     9 
    510 
    611namespace Ogre { 
     
    4045        { 
    4146                sceneNode->setLastRendered(sceneNode->lastVisited()); 
    42                 mNumRenderedNodes ++; 
     47                mRenderedNodes.push_back(node); 
    4348 
    4449                mSceneManager->_renderSceneNode(mCamera, sceneNode, mLeaveTransparentsInQueue); 
     
    130135        // TODO 
    131136} 
     137//----------------------------------------------------------------------- 
     138void SceneNodeHierarchyInterface::GetGeometry(GtpVisibility::HierarchyNode *node,        
     139                                                                                          GtpVisibility::GeometryList *geometryList,  
     140                                                                                          bool includeChildren) 
     141{ 
     142        SceneNode::ObjectIterator objIt =  
     143                static_cast<SceneNode *>(node)->getAttachedObjectIterator(); 
     144 
     145        while (objIt.hasMoreElements()) 
     146    { 
     147                MovableObject *movable = objIt.getNext(); 
     148                 
     149                // we are interested only in the entities, i.e., intances of geometry 
     150                if (movable->getMovableType() == "Entity") 
     151                { 
     152                        Entity *ent = static_cast<Entity *>(movable); 
     153                        //std::stringstream d; d << "ent " << ent->getName();  
     154                        //LogManager::getSingleton().logMessage(d.str()); 
     155                        geometryList->push_back(ent); 
     156                } 
     157    } 
     158} 
    132159} // namespace Ogre      
  • trunk/VUT/Ogre/src/OgreTerrainContentGenerator.cpp

    r111 r130  
    6868//----------------------------------------------------------------------- 
    6969SceneNode *TerrainContentGenerator::GenerateSceneObject(const Vector3 &position,  
    70                                          const Vector3 &rotation, const String& objName) 
     70                                         const Vector3 &rotation, const String& objName, const bool clampToTerrain) 
    7171{ 
    7272        Vector3 queryResult; 
    7373        // set y to max height so we are sure to be over terrain 
    7474        Vector3 pos(position.x, MAX_HEIGHT, position.z); 
     75 
     76        if (!clampToTerrain) 
     77        { 
     78                return SceneContentGenerator::GenerateSceneObject(queryResult, rotation, objName); 
     79        } 
    7580 
    7681        if (mRayQueryExecutor->executeRayQuery(&queryResult, position, Vector3::NEGATIVE_UNIT_Y)) 
  • trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp

    r129 r130  
    2424mDelayRenderTransparents(true), 
    2525mUseDepthPass(false), 
    26 mRenderItemBuffer(true), 
     26mRenderItemBuffer(false), 
    2727mCurrentEntityId(0) 
    2828{ 
    2929        mHierarchyInterface = new OctreeHierarchyInterface(this, mDestRenderSystem); 
    30  
     30        mQueryManager = new PlatformQueryManager(mHierarchyInterface, mCurrentViewport); 
     31 
     32        mVisibilityManager->SetQueryManager(mQueryManager); 
    3133        //mDisplayNodes = true; 
    3234        //mShowBoundingBoxes = true; 
     
    8789                mHierarchyInterface = NULL; 
    8890        } 
     91        if (mQueryManager) 
     92        { 
     93                delete mQueryManager; 
     94                mQueryManager = NULL; 
     95        } 
    8996} 
    9097//----------------------------------------------------------------------- 
    9198void VisibilityTerrainSceneManager::ShowVisualization(Camera *cam) 
    9299{ 
    93         LogManager::getSingleton().logMessage("***********VISUALIZATION************"); 
    94100        // add player camera for visualization purpose 
    95101        try  
     
    189195                setAmbientLight(ColourValue(1,1,1,1)); 
    190196        } 
    191  
    192         LogManager::getSingleton().logMessage("***********FIND OBJECTS************"); 
    193         getRenderQueue()->clear(); 
     197        //getRenderQueue()->clear(); 
    194198 
    195199        //-- show visible scene nodes and octree bounding boxes from last frame 
     
    221225void VisibilityTerrainSceneManager::_renderVisibleObjects() 
    222226{ 
    223         /* 
    224         std::stringstream d; 
    225         d << "Terrain render level: " << TerrainRenderable::getCurrentRenderLevelIndex(); 
    226         LogManager::getSingleton().logMessage(d.str()); 
    227  
    228227        // increase terrain renderlevel 
    229228        int renderLevel = TerrainRenderable::getCurrentRenderLevelIndex() + 1; 
     
    233232                renderLevel = 0; 
    234233        } 
    235 */ 
     234 
    236235        // visualization: apply standard rendering 
    237236        if (mShowVisualization) 
    238237        {        
    239238                TerrainSceneManager::_renderVisibleObjects(); 
    240         //      TerrainRenderable::setCurrentRenderLevelIndex(renderLevel); 
     239                TerrainRenderable::setCurrentRenderLevelIndex(renderLevel); 
    241240                return; 
    242241        } 
    243  
    244         LogManager::getSingleton().logMessage("***********RENDER OBJECTS************"); 
    245242 
    246243        InitDepthPass();        // create material for depth pass 
     
    309306        TerrainSceneManager::_renderVisibleObjects(); 
    310307 
    311         //TerrainRenderable::setCurrentRenderLevelIndex(renderLevel); 
     308        TerrainRenderable::setCurrentRenderLevelIndex(renderLevel); 
    312309        //WriteLog(); // write out stats 
    313310} 
     
    374371        // notifiy that frame has ended so terrain render level can be reset for correct 
    375372        // terrain rendering 
    376 /*      if (key == "TerrainLevelIdx") 
     373        if (key == "TerrainLevelIdx") 
    377374        { 
    378375                TerrainRenderable::setCurrentRenderLevelIndex((*static_cast<const int *>(val))); 
    379376                return true; 
    380         }*/ 
     377        } 
    381378        return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). 
    382379                setOption(key, val) || TerrainSceneManager::setOption(key, val); 
     
    507504                                //<< ", renderable name: " << irend-> 
    508505                                RenderSingleObjectForItemBuffer(*irend, ipass->first); 
    509                                 RenderSingleObjectForOcclusionQuery( 
     506                                //RenderSingleObjectForOcclusionQuery( 
    510507                } 
    511508        } 
     
    562559        //LogManager::getSingleton().logMessage("has vertex program"); 
    563560        Pass *usedPass = setPass(mItemBufferPass);  
    564 //Pass *usedPass = setPass(pass); 
     561        //Pass *usedPass = setPass(pass); 
    565562        std::stringstream d; 
    566563        d << "item buffer id: " << rend->getId() << ", col: " << col; 
     
    571568} 
    572569//----------------------------------------------------------------------- 
    573 Entity* VisibilityTerrainSceneManager::createEntity(const String& entityName, const String& meshName) 
     570GtpVisibility::VisibilityManager *VisibilityTerrainSceneManager::GetVisibilityManager() 
     571{ 
     572        return mVisibilityManager; 
     573} 
     574//----------------------------------------------------------------------- 
     575Entity* VisibilityTerrainSceneManager::createEntity(const String& entityName,  
     576                                                                                                        const String& meshName) 
    574577{ 
    575578        Entity *ent = SceneManager::createEntity(entityName, meshName); 
    576579 
    577         for (int i = 0; i < ent->getNumSubEntities(); ++i) 
     580        for (int i = 0; i < (int)ent->getNumSubEntities(); ++i) 
    578581        { 
    579582                ent->getSubEntity(i)->setId(mCurrentEntityId ++); 
Note: See TracChangeset for help on using the changeset viewer.