Changeset 1206


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
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreKdTree.h

    r1203 r1206  
    3434namespace Ogre 
    3535{ 
     36        class KdTreeCamera; 
    3637        class KdRenderable; 
    3738        struct SplitInfo; 
     
    519520 
    520521                // test visibility of objects and add to render queue 
    521                 void queueVisibleObjects(Camera* cam, RenderQueue* queue, bool onlyShadowCasters,  
     522                void queueVisibleObjects(KdTreeCamera* cam, RenderQueue* queue, bool onlyShadowCasters,  
    522523                        bool showBoxes, KdTree::NodeList& visibleNodes); 
    523524 
     
    555556 
    556557                // recursive rendering function 
    557                 void recQueueVisibleObjects(KdTree::Node * node, unsigned long currentFrame, Camera* cam, 
    558                         RenderQueue* queue, bool onlyShadowCasters, bool showBoxes, KdTree::NodeList& visibleNodes); 
     558                void recQueueVisibleObjects(KdTree::Node * node, unsigned long currentFrame, KdTreeCamera* cam, 
     559                        RenderQueue* queue, bool onlyShadowCasters, bool showBoxes,  
     560                        KdTree::NodeList& visibleNodes, bool fullVis = false); 
    559561 
    560562                // recursively find visible nodes 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreKdTreeSceneManager.h

    r1203 r1206  
    1515#include <VisibilityManager.h> 
    1616#include "OgreKdTree.h" 
     17#include "OgreKdTreeCamera.h" 
    1718 
    1819#define KDTREE_MAX_DEPTH 12 
     
    3839        /************************************************************************/ 
    3940 
     41        /** Override from Scenemanager to create Camera as instance of KdTreeCamera 
     42        */ 
     43        virtual Camera* createCamera(const String& name); 
     44 
    4045        /** Override from SceneManager to create SceneNodes as instance of KdTreeSceneNode 
    4146        */ 
     
    171176        */ 
    172177        void WriteLog(); 
     178 
     179        /** Switches between simple & enhanced visibility 
     180        */ 
     181        void setEnhancedVis(bool enhanced); 
    173182 
    174183 
  • GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/scripts/Plugin_VisibilitySceneManager.vcproj

    r1195 r1206  
    273273                                </File> 
    274274                                <File 
     275                                        RelativePath="..\include\OgreKdTreeCamera.h"> 
     276                                </File> 
     277                                <File 
    275278                                        RelativePath="..\include\OgreKdTreeHierarchyInterface.h"> 
    276279                                </File> 
     
    287290                                <File 
    288291                                        RelativePath="..\src\OgreKdTree.cpp"> 
     292                                </File> 
     293                                <File 
     294                                        RelativePath="..\src\OgreKdTreeCamera.cpp"> 
    289295                                </File> 
    290296                                <File 
  • 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.