Ignore:
Timestamp:
08/17/06 13:56:10 (18 years ago)
Author:
szydlowski
Message:

enhanced visibility partially implemented

Location:
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTree.cpp

    r1203 r1206  
    88*/ 
    99 
    10 #include <OgreCamera.h> 
    1110#include "OgreKdTree.h" 
    1211#include "OgreKdRenderable.h" 
    1312#include "OgreKdTreeSceneNode.h" 
    1413#include "OgreKdTreeSceneManager.h" 
     14#include "OgreKdTreeCamera.h" 
    1515 
    1616#include <OgreStringConverter.h> 
     
    11841184 
    11851185        //------------------------------------------------------------------------- 
    1186         void KdTree::queueVisibleObjects(Camera* cam, RenderQueue* queue, bool onlyShadowCasters,  
     1186        void KdTree::queueVisibleObjects(KdTreeCamera* cam, RenderQueue* queue, bool onlyShadowCasters,  
    11871187                bool showBoxes, KdTree::NodeList& visibleNodes) 
    11881188        { 
     
    11941194        //------------------------------------------------------------------------- 
    11951195        void KdTree::recQueueVisibleObjects(KdTree::Node * node, unsigned long currentFrame,  
    1196                 Camera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, KdTree::NodeList& visibleNodes) 
    1197         { 
     1196                KdTreeCamera* cam, RenderQueue* queue, bool onlyShadowCasters, bool showBoxes,  
     1197                KdTree::NodeList& visibleNodes, bool fullVis) 
     1198        { 
     1199                KdTreeCamera::NodeVisibility vis = KdTreeCamera::KDNV_PART; 
    11981200                // test visibility 
    1199                 if (cam->isVisible(node->mAABB)) 
     1201                //if (cam->isVisible(node->mAABB)) 
     1202                if (fullVis ||  
     1203                        ((vis = cam->getVisibilityEnhanced(node->mAABB)) != KdTreeCamera::KDNV_NONE)) 
     1204                        //((vis = (cam->*getVisibility)(node->mAABB)) != KdTreeCamera::KDNV_NONE)) 
    12001205                { 
    12011206                        visibleNodes.push_back(node); 
     
    12051210                        if (node->getLeftChild()) 
    12061211                                recQueueVisibleObjects(node->getLeftChild(), currentFrame,  
    1207                                 cam, queue, onlyShadowCasters, showBoxes, visibleNodes); 
     1212                                cam, queue, onlyShadowCasters, showBoxes, visibleNodes,  
     1213                                (fullVis || vis == KdTreeCamera::KDNV_FULL) ? true : false); 
    12081214                        if (node->getRightChild()) 
    12091215                                recQueueVisibleObjects(node->getRightChild(), currentFrame,  
    1210                                 cam, queue, onlyShadowCasters, showBoxes, visibleNodes); 
     1216                                cam, queue, onlyShadowCasters, showBoxes, visibleNodes,  
     1217                                (fullVis || vis == KdTreeCamera::KDNV_FULL) ? true : false); 
    12111218                } 
    12121219        } 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTreeSceneManager.cpp

    r1204 r1206  
    8080} 
    8181 
     82void KdTreeSceneManager::setEnhancedVis(bool enhanced) 
     83{ 
     84        for (CameraList::iterator it = mCameras.begin(); it != mCameras.end(); it ++) 
     85        { 
     86                KDCAMPTR_CAST(it->second)->setEnhancedVisMode(enhanced); 
     87        } 
     88} 
     89 
    8290bool KdTreeSceneManager::setOption(const String& strKey, const void* pValue) 
    8391{ 
     
    133141                mKdTree = new KdTree(mMaxDepth, mBuildMethod, mHiLiteLevel, mShowAllBoxes, mShowNodes); 
    134142                mKdTree->build(static_cast<KdTreeSceneNode *>(mSceneRoot)); 
     143                return true; 
     144        } 
     145        else if (strKey == "EnhancedVisibility") 
     146        { 
     147                bool enh = *static_cast<const bool *>(pValue); 
     148                setEnhancedVis(enh); 
    135149                return true; 
    136150        } 
     
    338352                *static_cast<Real *>(pDestValue) = PlaneEvent::KI; 
    339353                return true; 
     354        } 
     355        else if (strKey == "EnhancedVisibility") 
     356        { 
     357                *static_cast<bool *>(pDestValue) =  
     358                        KDCAMPTR_CAST(mCameras.begin()->second)->getEnhancedVisMode(); 
    340359        } 
    341360        else if (strKey == "BuildMethod") 
     
    441460} 
    442461 
     462Camera* KdTreeSceneManager::createCamera(const String& name) 
     463{ 
     464        // Check name not used 
     465        if (mCameras.find(name) != mCameras.end()) 
     466        { 
     467                OGRE_EXCEPT( 
     468                        Exception::ERR_DUPLICATE_ITEM, 
     469                        "A camera with the name " + name + " already exists", 
     470                        "SceneManager::createCamera" ); 
     471        } 
     472 
     473        Camera *c = new KdTreeCamera(name, this); 
     474        mCameras.insert(CameraList::value_type(name, c)); 
     475 
     476        return c; 
     477} 
     478 
    443479SceneNode* KdTreeSceneManager::createSceneNode(void) 
    444480{ 
     
    543579                        mVisibleNodes.clear(); 
    544580                        if (mKdTree) 
    545                                 mKdTree->queueVisibleObjects(cam, getRenderQueue(), onlyShadowCasters, mShowBoxes, mVisibleNodes); 
     581                                mKdTree->queueVisibleObjects(KDCAMPTR_CAST(cam), getRenderQueue(), onlyShadowCasters, mShowBoxes, mVisibleNodes); 
    546582                } 
    547583        } 
     
    565601                                getRenderQueue()->clear(); 
    566602                                if (mKdTree) 
    567                                         mKdTree->queueVisibleObjects(cam, getRenderQueue(), onlyShadowCasters, mShowBoxes, mVisibleNodes); 
     603                                        mKdTree->queueVisibleObjects(KDCAMPTR_CAST(cam), getRenderQueue(), onlyShadowCasters, mShowBoxes, mVisibleNodes); 
    568604                        } 
    569605 
Note: See TracChangeset for help on using the changeset viewer.