Changeset 34


Ignore:
Timestamp:
03/30/05 17:54:55 (19 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/OcclusionCullingSceneManager
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/OcclusionCullingSceneManager/TestCulling/TestCullingApplication.cpp

    r33 r34  
    2020#include "windows.h" 
    2121 
     22RaySceneQuery* raySceneQuery = 0; 
     23 
    2224/***********************************************/ 
    2325/* TestCullingApplication implementation       */ 
    2426/***********************************************/ 
    25  
    26  
     27TestCullingApplication::~TestCullingApplication() 
     28{ 
     29        delete raySceneQuery; 
     30} 
     31//----------------------------------------------------------------------- 
     32void TestCullingApplication::createCamera( void ) 
     33{ 
     34        // Create the camera 
     35        mCamera = mSceneMgr->createCamera("PlayerCam"); 
     36 
     37        // Position it at 500 in Z direction 
     38        mCamera->setPosition(Vector3(128,25,128)); 
     39 
     40        // Look back along -Z 
     41    mCamera->lookAt(Vector3(0,0,-300)); 
     42    mCamera->setNearClipDistance( 1 ); 
     43    mCamera->setFarClipDistance( 1000 ); 
     44} 
    2745//----------------------------------------------------------------------- 
    2846void TestCullingApplication::createScene(void) 
    2947{ 
     48        Plane waterPlane; 
     49        // Set ambient light 
     50        mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); 
     51         
     52        // Create a light 
     53        Light* l = mSceneMgr->createLight("MainLight"); 
     54        // Accept default settings: point light, white diffuse, just set position 
     55        // NB I could attach the light to a SceneNode if I wanted it to move automatically with 
     56        //  other objects, but I don't 
     57        l->setPosition(20,80,50); 
     58 
     59        // Fog 
     60        // NB it's VERY important to set this before calling setWorldGeometry  
     61        // because the vertex program picked will be different 
     62        ColourValue fadeColour(0.93, 0.86, 0.76); 
     63        mSceneMgr->setFog( FOG_LINEAR, fadeColour, .001, 500, 1000); 
     64        mWindow->getViewport(0)->setBackgroundColour(fadeColour); 
     65 
     66        std::string terrain_cfg("terrain.cfg"); 
     67#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE 
     68        terrain_cfg = mResourcePath + terrain_cfg; 
     69#endif 
     70        mSceneMgr -> setWorldGeometry( terrain_cfg ); 
     71        // Infinite far plane? 
     72        if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE)) 
     73        { 
     74                mCamera->setFarClipDistance(0); 
     75        } 
     76 
     77        // Define the required skyplane 
     78        Plane plane; 
     79        // 5000 world units from the camera 
     80        plane.d = 5000; 
     81        // Above the camera, facing down 
     82        plane.normal = -Vector3::UNIT_Y; 
     83 
     84        // Set a nice viewpoint 
     85        mCamera->setPosition(707,2500,528); 
     86        mCamera->setOrientation(Quaternion(-0.3486, 0.0122, 0.9365, 0.0329)); 
     87 
     88        raySceneQuery = mSceneMgr->createRayQuery( 
     89        Ray(mCamera->getPosition(), Vector3::NEGATIVE_UNIT_Y)); 
     90 
    3091     // Create a skybox 
    31      mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox"); 
    32          mShip = mSceneMgr->createEntity("razor", "razor.mesh"); 
    33          mShipNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
    34          mShipNode->attachObject(mShip); 
    35  
    36          mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); 
     92  //   mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox"); 
    3793 
    3894         // CEGUI setup 
    39      mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, ST_GENERIC); 
     95         setupGui(); 
     96} 
     97//----------------------------------------------------------------------- 
     98void TestCullingApplication::setupGui( void ) 
     99{ 
     100         mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, ST_EXTERIOR_CLOSE); 
    40101     mGUISystem = new CEGUI::System(mGUIRenderer); 
    41102 
     
    57118void TestCullingApplication::createFrameListener(void) 
    58119{ 
    59         mFrameListener= new MouseQueryListener(mWindow, mCamera, mSceneMgr, mGUIRenderer, mShipNode); 
     120        mFrameListener= new MouseQueryListener(mWindow, mCamera, mSceneMgr, mGUIRenderer); 
    60121        mFrameListener->showDebugOverlay(true); 
    61122        mRoot->addFrameListener(mFrameListener); 
     
    73134 
    74135//----------------------------------------------------------------------- 
    75 MouseQueryListener::MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer, 
    76                                            SceneNode* shipNode) 
    77         : ExampleFrameListener(win, cam, false, true), mGUIRenderer(renderer), mShipNode(shipNode)//,  mShutdownRequested(false) 
     136MouseQueryListener::MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer) 
     137        : ExampleFrameListener(win, cam, false, true), mGUIRenderer(renderer),  
     138                mShutdownRequested(false) 
    78139{ 
    79140 
    80141        // Setup default variables 
    81         mCurrentObject = NULL; 
     142//      mCurrentObject = NULL; 
    82143        mLMouseDown = false; 
    83144        mRMouseDown = false; 
     
    144205                CEGUI::MouseCursor::getSingleton().show( ); 
    145206        mLMouseDown = false; 
    146     } // if 
     207    } 
    147208    // Right mouse button up 
    148209    else if (e->getButtonID() & InputEvent::BUTTON1_MASK) 
     
    150211        CEGUI::MouseCursor::getSingleton().show( ); 
    151212        mRMouseDown = false; 
    152     } // else if 
    153 } // mouseReleased 
     213    } 
     214}  
    154215//----------------------------------------------------------------------- 
    155216void MouseQueryListener::mouseDragged (MouseEvent *e) 
    156217 { 
    157      // If we are dragging the left mouse button. 
    158      if ( mLMouseDown ) 
    159      { 
    160                   mShipNode->translate(-e->getRelX() * 200, -e->getRelY() * 200, 0.0); 
    161      } // if 
    162  
    163     // If we are dragging the right mouse button. 
    164     else if ( mRMouseDown ) 
    165     { 
    166         mCamera->yaw( -e->getRelX() * mRotateSpeed ); 
    167         mCamera->pitch( -e->getRelY() * mRotateSpeed ); 
    168     } // else if 
    169 } // mouseDragged 
     218         /* 
     219         // If we are dragging the left mouse button.     
     220         if ( mLMouseDown ) 
     221         { 
     222                mShipNode->translate(-e->getRelX() * 200, -e->getRelY() * 200, 0.0); 
     223     } 
     224         */ 
     225          
     226         // If we are dragging the right mouse button. 
     227         if ( mRMouseDown ) 
     228         { 
     229                 mCamera->yaw( -e->getRelX() * mRotateSpeed ); 
     230                 mCamera->pitch( -e->getRelY() * mRotateSpeed ); 
     231         } 
     232} 
     233//----------------------------------------------------------------------- 
     234bool MouseQueryListener::frameStarted(const FrameEvent &evt) 
     235{ 
     236        // clamp to terrain 
     237        static Ray updateRay; 
     238        updateRay.setOrigin(mCamera->getPosition()); 
     239        updateRay.setDirection(Vector3::NEGATIVE_UNIT_Y); 
     240        raySceneQuery->setRay(updateRay); 
     241        RaySceneQueryResult& qryResult = raySceneQuery->execute(); 
     242        RaySceneQueryResult::iterator i = qryResult.begin(); 
     243          
     244        if (i != qryResult.end() && i->worldFragment) 
     245        { 
     246                SceneQuery::WorldFragment* wf = i->worldFragment; 
     247                mCamera->setPosition(mCamera->getPosition().x,  
     248                        i->worldFragment->singleIntersection.y + 10,  
     249                        mCamera->getPosition().z); 
     250        } 
     251          
     252        return ExampleFrameListener::frameStarted(evt); 
     253} 
    170254//----------------------------------------------------------------------- 
    171255bool MouseQueryListener::frameEnded(const FrameEvent& evt) 
     
    252336    TestCullingApplication app; 
    253337 
    254         try { 
     338        try  
     339        { 
    255340        app.go(); 
    256     } catch( Ogre::Exception& e ) { 
     341    }  
     342        catch( Ogre::Exception& e )  
     343        { 
    257344        MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL); 
    258345    }    
  • trunk/VUT/OcclusionCullingSceneManager/TestCulling/TestCullingApplication.h

    r33 r34  
    2929public: 
    3030 
    31     MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer, 
    32                                            SceneNode* shipNode); 
     31    MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, CEGUI::Renderer *renderer); 
    3332 
    3433 
     
    3736    } 
    3837 
     38        bool frameStarted(const FrameEvent& evt); 
    3939        bool frameEnded(const FrameEvent& evt); 
     40 
    4041    /* MouseListener callbacks. */ 
    4142    virtual void mouseClicked(MouseEvent* e) { } 
     
    6768    bool mLMouseDown, mRMouseDown;     // True if the mouse buttons are down 
    6869    SceneManager *mSceneMgr;           // A pointer to the scene manager 
    69     SceneNode *mCurrentObject;         // The newly created object 
    70     CEGUI::Renderer *mGUIRenderer;     // cegui renderer 
    71         SceneNode* mShipNode; 
     70     
     71        CEGUI::Renderer *mGUIRenderer;     // cegui renderer 
     72         
    7273        bool mShutdownRequested; 
    7374        int mCurrentAlgorithm; 
     
    7980        OverlayElement *mQueryCulledNodesInfo; 
    8081    OverlayElement *mTraversedNodesInfo; 
    81  
    8282}; 
    8383 
     
    8686{ 
    8787public: 
    88     /*TestCullingApplication() 
    89     { 
    90     }*/ 
     88        ~TestCullingApplication(); 
    9189 
    9290protected: 
    9391        void createScene(void); 
    9492        void createFrameListener(void); 
     93        void setupGui(void); 
     94        virtual void createCamera(void); 
    9595 
    9696        CEGUI::OgreCEGUIRenderer *mGUIRenderer; 
     
    100100        void chooseSceneManager(void); 
    101101 
    102         Entity* mShip; 
    103         SceneNode* mShipNode; 
    104  
    105 /*    String mQuakePk3; 
    106     String mQuakeLevel; 
    107  
    108     // Override resource sources (include Quake3 archives) 
    109     void setupResources(void) 
    110     { 
    111  
    112         // Load Quake3 locations from a file 
    113         ConfigFile cf; 
    114  
    115         cf.load("quake3settings.cfg"); 
    116  
    117         mQuakePk3 = cf.getSetting("Pak0Location"); 
    118         mQuakeLevel = cf.getSetting("Map"); 
    119  
    120                 ExampleApplication::setupResources(); 
    121         ResourceManager::addCommonArchiveEx(mQuakePk3, "Zip"); 
    122  
    123     }*/ 
     102        //Entity* mShip; 
     103        //SceneNode* mShipNode; 
    124104}; 
    125105 
  • trunk/VUT/OcclusionCullingSceneManager/include/OgreOcclusionCullingTerrainSceneManager.h

    r33 r34  
    2626                ~OcclusionCullingTerrainSceneManager(); 
    2727         
    28                 void _renderVisibleObjects(void); 
    29                 void _findVisibleObjects(Camera* cam, bool onlyShadowCasters); 
    30                 void _updateSceneGraph(Camera* cam); 
     28                //void _renderVisibleObjects(void); 
     29                //void _findVisibleObjects(Camera* cam, bool onlyShadowCasters); 
     30                 
     31                //void _updateSceneGraph(Camera* cam); 
    3132 
    3233                /** Sets the given option for the SceneManager 
     
    3536                        "Algorithm", int *;                      
    3637                */ 
     38                 
    3739                virtual bool setOption( const String &, const void * ); 
    3840                /** Gets the given option for the Scene Manager. 
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingSceneManagerDll.cpp

    r33 r34  
    2727#include "OgreOcclusionCullingSceneManager.h" 
    2828#include "OgreOcclusionCullingDotSceneManager.h" 
     29#include "OgreHeightmapTerrainPageSource.h" 
    2930#include <OgreRoot.h> 
    3031 
    31 //#include "OgreHeightmapTerrainPageSource.h" 
    3232//#include <windows.h> 
    3333 
     
    3636    OcclusionCullingSceneManager *occlusionPlugin; 
    3737        OcclusionCullingTerrainSceneManager *occlusionTerrainPlugin; 
    38          
     38        HeightmapTerrainPageSource* heightmapTerrainPageSource; 
     39 
    3940    //----------------------------------------------------------------------- 
    4041    extern "C" void dllStartPlugin(void) 
     
    4344                occlusionPlugin = new OcclusionCullingSceneManager(); 
    4445                occlusionTerrainPlugin = new OcclusionCullingTerrainSceneManager(); 
    45      
     46                heightmapTerrainPageSource = new HeightmapTerrainPageSource(); 
     47 
     48                occlusionTerrainPlugin->registerPageSource("Heightmap", heightmapTerrainPageSource); 
     49 
    4650            // Register 
    4751                Root::getSingleton().setSceneManager( ST_GENERIC, occlusionPlugin ); 
     
    5256    extern "C" void dllStopPlugin(void) 
    5357    { 
     58                delete heightmapTerrainPageSource; 
    5459        delete occlusionPlugin; 
    5560                delete occlusionTerrainPlugin; 
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingSceneTraverser.cpp

    r33 r34  
    4141                mDistanceQueue->push(root); 
    4242                mCurrentTestIdx = 0; 
    43                  
     43 
     44                mCurrentAlgorithm = RENDER_CULL_FRUSTUM; 
    4445                switch(mCurrentAlgorithm) 
    4546                { 
     
    144145                        node->setNodeVisible(false); 
    145146                                 
    146                         if(cam->isVisible(node->_getWorldAABB())) 
     147                        if(!cam->isVisible(node->_getWorldAABB())) 
    147148                        { 
    148149                                // update node's visited flag  
     
    151152                                traverseNode(cam, node); 
    152153                        } 
    153                         else 
     154                        //else 
     155                                if(cam->isVisible(node->_getWorldAABB())) 
     156                                { 
     157                                        mNumQueryCulledNodes ++; 
     158                                }else 
    154159                        {                        
    155160                                mNumFrustumCulledNodes ++; 
     
    230235        { 
    231236                mNumTraversedNodes ++; 
    232  
     237                 
    233238                if(node->numAttachedObjects() > 0) 
    234239                { 
     
    252257                //HACK (too slow) 
    253258                mSceneManager->_renderSceneNode(cam, node); 
     259                //MessageBox( NULL, "myplugin registered", "this is my plugin", MB_OK | MB_ICONERROR | MB_TASKMODAL); 
    254260        } 
    255261        //----------------------------------------------------------------------- 
  • trunk/VUT/OcclusionCullingSceneManager/src/OgreOcclusionCullingTerrainSceneManager.cpp

    r33 r34  
    1515        { 
    1616                mOcclusionCullingSceneTraverser = new OcclusionCullingSceneTraverser(this, mDestRenderSystem); 
     17                mDisplayNodes = true; 
     18                //mShowBoundingBoxes = true; 
     19                mShowBoxes = true; 
    1720        } 
    1821        //----------------------------------------------------------------------- 
     
    2225        } 
    2326        //----------------------------------------------------------------------- 
    24         void OcclusionCullingTerrainSceneManager::_renderVisibleObjects(void) 
     27        /*void OcclusionCullingTerrainSceneManager::_renderVisibleObjects(void) 
    2528        { 
    2629                mOcclusionCullingSceneTraverser->renderScene(mCameraInProgress, mSceneRoot); 
     
    3841 
    3942                TerrainSceneManager::_updateSceneGraph(cam); 
    40         } 
     43        }*/ 
    4144        //----------------------------------------------------------------------- 
    4245        bool OcclusionCullingTerrainSceneManager::setOption( const String & key, const void * val ) 
Note: See TracChangeset for help on using the changeset viewer.