- Timestamp:
- 05/16/05 20:22:32 (20 years ago)
- Location:
- trunk/VUT
- Files:
-
- 4 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/GtpVisibility/src/StopAndWaitCullingManager.cpp
r96 r100 39 39 unsigned int visiblePixels = 0; 40 40 41 mHierarchyInterface->IssueOcclusionQuery(node)->GetQueryResult(visiblePixels, true); 41 mHierarchyInterface->IssueOcclusionQuery(node)-> 42 GetQueryResult(visiblePixels, true); 42 43 43 44 // node visible -
trunk/VUT/GtpVisibility/src/VisibilityEnvironment.cpp
r74 r100 2 2 3 3 namespace GtpVisibility { 4 4 5 //----------------------------------------------------------------------- 5 6 VisibilityEnvironment::VisibilityEnvironment() -
trunk/VUT/GtpVisibility/src/VisibilityManager.cpp
r99 r100 10 10 //----------------------------------------------------------------------- 11 11 VisibilityManager::VisibilityManager(VisibilityEnvironment *visEnvironment): 12 mVisibilityThreshold(0), mCullingManager(NULL) 12 mVisibilityThreshold(0), mCullingManager(NULL), 13 mQueryManager(new DummyQueryManager(NULL)), 14 mPreprocessingManager(new DummyPreprocessingManager(NULL)), 15 mVisibilityEnvironment(visEnvironment) 13 16 { 14 mVisibilityEnvironment = visEnvironment; 15 16 //SetCullingManager(VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING); 17 SetCullingManager(VisibilityEnvironment::FRUSTUM_CULLING); 18 19 mQueryManager = new DummyQueryManager(0); 20 mPreprocessingManager = new DummyPreprocessingManager(0); 17 SetCullingManager(VisibilityEnvironment::COHERENT_HIERARCHICAL_CULLING); 18 //SetCullingManager(VisibilityEnvironment::FRUSTUM_CULLING); 21 19 } 22 20 //----------------------------------------------------------------------- … … 33 31 { 34 32 // delete old culling manager 35 if (mCullingManager)33 if (mCullingManager) 36 34 delete mCullingManager; 37 35 … … 73 71 mCullingManager->RenderScene(); 74 72 } 73 //----------------------------------------------------------------------- 75 74 VisibilityEnvironment::CullingManagerType VisibilityManager::GetCullingManagerType() 76 75 { 77 76 return mCullingManagerType; 78 77 } 79 //----------------------------------------------------------------------- 78 80 79 } // namespace GtpVisibility -
trunk/VUT/Ogre/include/OgreVisibilityOctreeSceneManager.h
r99 r100 57 57 OctreeHierarchyInterface *mHierarchyInterface; 58 58 GtpVisibility::VisibilityManager *mVisibilityManager; 59 59 60 bool mUseVisibilityCulling; 61 bool mShowVisualization; 60 62 }; 61 63 -
trunk/VUT/Ogre/include/OgreVisibilityTerrainSceneManager.h
r99 r100 56 56 void WriteLog(); 57 57 void SetShowVisualization(bool showViz); 58 58 59 /* void SetSkyBoxEnabled(bool enabled); 60 void SetSkyPlaneEnabled(bool enabled); 61 void SetSkyDomeEnabled(bool enabled);*/ 62 59 63 protected: 60 64 -
trunk/VUT/Ogre/scripts/Plugin_VisibilitySceneManager.vcproj
r92 r100 88 88 OptimizeForProcessor="2" 89 89 AdditionalIncludeDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\include";"$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\include";"$(OGRE_PATH)\Samples\Common\include";"$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";..\include;..\..\GtpVisibility\include" 90 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL; PLUGIN_OCCLUSIONCULLINGSCENEMANAGER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE"90 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;GTP_VISIBILITY_MODIFIED_OGRE" 91 91 StringPooling="TRUE" 92 92 RuntimeLibrary="2" -
trunk/VUT/Ogre/src/OgrePlatformHierarchyInterface.cpp
r94 r100 20 20 DeleteQueries(); 21 21 22 if (mSolidBoundingBox)22 if (mSolidBoundingBox) 23 23 delete mSolidBoundingBox; 24 24 } … … 26 26 void PlatformHierarchyInterface::DeleteQueries() 27 27 { 28 for (int i=0; i < (int)mOcclusionQueries.size(); ++i)28 for (int i=0; i < (int)mOcclusionQueries.size(); ++i) 29 29 delete mOcclusionQueries[i]; 30 30 … … 72 72 GtpVisibility::OcclusionQuery *PlatformHierarchyInterface::GetNextOcclusionQuery() 73 73 { 74 if (mCurrentTestIdx == mOcclusionQueries.size())74 if (mCurrentTestIdx == mOcclusionQueries.size()) 75 75 { 76 76 mOcclusionQueries.push_back(new PlatformOcclusionQuery(mRenderSystem)); … … 87 87 SetCamera(cam); 88 88 89 if (cullCam)89 if (cullCam) 90 90 SetCullCamera(cullCam); 91 91 else … … 143 143 SolidBoundingBox *PlatformHierarchyInterface::GetSolidBoundingBox() 144 144 { 145 if (!mSolidBoundingBox)145 if (!mSolidBoundingBox) 146 146 mSolidBoundingBox = new SolidBoundingBox; 147 147 -
trunk/VUT/Ogre/src/OgreSceneNodeHierarchyInterface.cpp
r94 r100 62 62 SceneNode *sceneNode = static_cast<SceneNode *>(node); 63 63 64 while (sceneNode && !sceneNode->isNodeVisible())64 while (sceneNode && !sceneNode->isNodeVisible()) 65 65 { 66 66 sceneNode->setNodeVisible(true); … … 115 115 AxisAlignedBox *SceneNodeHierarchyInterface::GetBoundingBox(GtpVisibility::HierarchyNode *node) 116 116 { 117 if (node != mPreviousNode)117 if (node != mPreviousNode) 118 118 { 119 119 mPreviousNode = node; 120 121 120 mBox = static_cast<SceneNode *>(node)->_getWorldAABB(); 122 121 } -
trunk/VUT/Ogre/src/OgreSolidBoundingBox.cpp
r97 r100 121 121 m_pMaterial = MaterialManager::getSingleton().getByName("QueryMaterial"); 122 122 123 if (m_pMaterial.isNull())123 if (m_pMaterial.isNull()) 124 124 { 125 125 m_pMaterial = MaterialManager::getSingleton(). -
trunk/VUT/Ogre/src/OgreSolidHalfBoundingBox.cpp
r97 r100 42 42 43 43 // fan 1 44 if (isFirstHalf)44 if (isFirstHalf) 45 45 { 46 46 *pPos++ = min.x; *pPos++ = max.y; *pPos++ = max.z; //011 … … 89 89 m_pMaterial = MaterialManager::getSingleton().getByName("QueryMaterial"); 90 90 91 if (m_pMaterial.isNull())91 if (m_pMaterial.isNull()) 92 92 { 93 93 m_pMaterial = MaterialManager::getSingleton(). -
trunk/VUT/Ogre/src/OgreVisibilityOctreeSceneManager.cpp
r99 r100 12 12 VisibilityOctreeSceneManager::VisibilityOctreeSceneManager( 13 13 GtpVisibility::VisibilityManager *visManager) 14 : mVisibilityManager(visManager), mUseVisibilityCulling(true) 14 : mVisibilityManager(visManager), mUseVisibilityCulling(true), 15 mShowVisualization(false) 15 16 { 16 17 mHierarchyInterface = … … 35 36 mHierarchyInterface->InitFrame(mOctree, mCameraInProgress, 36 37 mCullCamera ? getCamera("CullCamera") : NULL); 37 mVisibilityManager->GetCullingManager()->InitFrame();38 //mVisibilityManager->GetCullingManager()->InitFrame(); 38 39 39 40 // standard scenemanager rendering without hierarchical culling … … 65 66 setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); 66 67 67 //-- the hierarchical culling algorithm 68 69 /** 70 * the hierarchical culling algorithm 71 **/ 68 72 mVisibilityManager->ApplyVisibilityCulling(); 73 69 74 70 75 #ifdef GTP_VISIBILITY_MODIFIED_OGRE … … 84 89 // we interleave identification and rendering of objects 85 90 // in _renderVisibibleObjects 91 if (!mUseVisibilityCulling) 92 { 93 OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters); 94 return; 95 } 96 97 if (mShowVisualization) 98 { 99 100 for ( BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it ) 101 { 102 getRenderQueue()->addRenderable(*it); 103 } 104 } 105 86 106 getRenderQueue()->clear(); 87 107 mBoxes.clear(); 88 108 mVisible.clear(); 89 90 if(!mUseVisibilityCulling)91 {92 OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters);93 }94 109 } 95 110 //----------------------------------------------------------------------- … … 112 127 return true; 113 128 } 114 129 if (key == "ShowVisualization") 130 { 131 mShowVisualization = (*static_cast<const bool *>(val)); 132 return true; 133 } 115 134 return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). 116 135 setOption(key, val) || OctreeSceneManager::setOption(key, val); -
trunk/VUT/Ogre/src/OgreVisibilityOptionsManager.cpp
r87 r100 3 3 namespace Ogre { 4 4 //----------------------------------------------------------------------- 5 VisibilityOptionsManager::VisibilityOptionsManager(GtpVisibility::VisibilityManager *visManager, 6 GtpVisibility::HierarchyInterface *hierarchyInterface): 7 mVisibilityManager(visManager), mHierarchyInterface(hierarchyInterface) 5 VisibilityOptionsManager::VisibilityOptionsManager( 6 GtpVisibility::VisibilityManager *visManager, 7 GtpVisibility::HierarchyInterface *hierarchyInterface): 8 mVisibilityManager(visManager), 9 mHierarchyInterface(hierarchyInterface) 8 10 { 9 11 } … … 11 13 bool VisibilityOptionsManager::setOption( const String & key, const void * val ) 12 14 { 13 if ( key == "Algorithm")15 if (key == "Algorithm") 14 16 { 15 17 mVisibilityManager->SetCullingManager(*static_cast<const … … 17 19 return true; 18 20 } 19 if (key == "Threshold")21 if (key == "Threshold") 20 22 { 21 23 mVisibilityManager->SetVisibilityCullingThreshold(*static_cast<const int *>(val)); … … 67 69 } 68 70 //----------------------------------------------------------------------- 69 bool VisibilityOptionsManager::getOptionKeys( StringVector & refKeys)71 bool VisibilityOptionsManager::getOptionKeys(StringVector & refKeys) 70 72 { 71 refKeys.push_back( "NumRenderedNodes");72 refKeys.push_back( "NumTraversedNodes");73 refKeys.push_back( "NumQueryCulledNodes");74 refKeys.push_back( "NumFrustumCulledNodes");73 refKeys.push_back("NumRenderedNodes"); 74 refKeys.push_back("NumTraversedNodes"); 75 refKeys.push_back("NumQueryCulledNodes"); 76 refKeys.push_back("NumFrustumCulledNodes"); 75 77 76 78 return true; -
trunk/VUT/Ogre/src/OgreVisibilitySceneManager.cpp
r99 r100 27 27 // we interleave identification and rendering of objects 28 28 // in _renderVisibibleObjects 29 if (!mUseVisibilityCulling)29 if (!mUseVisibilityCulling) 30 30 { 31 31 SceneManager::_findVisibleObjects(cam, onlyShadowCasters); … … 38 38 mVisibilityManager->GetCullingManager()->InitFrame(); 39 39 40 if (!mUseVisibilityCulling)40 if (!mUseVisibilityCulling) 41 41 { 42 42 SceneManager::_renderVisibleObjects(); -
trunk/VUT/Ogre/src/OgreVisibilitySceneManagerDll.cpp
r94 r100 28 28 //#include <OgreVisibilityDotSceneManager.h> 29 29 #include <OgreHeightmapTerrainPageSource.h> 30 #include <OgreRoot.h> 31 30 32 #include "VisibilityManager.h" 31 33 #include "StopAndWaitCullingManager.h" 32 34 #include "VisibilityEnvironment.h" 33 34 #include <OgreRoot.h>35 35 36 36 GtpVisibility::VisibilityEnvironment *visEnv; -
trunk/VUT/Ogre/src/OgreVisibilityTerrainSceneManager.cpp
r99 r100 7 7 #include <OgreCamera.h> 8 8 #include <OgreLogManager.h> 9 #include <OgreStringConverter.h> 9 10 10 11 #include <windows.h> … … 36 37 mHierarchyInterface->InitFrame(mOctree, mCameraInProgress, 37 38 mCullCamera ? getCamera("CullCamera") : NULL); 38 mVisibilityManager->GetCullingManager()->InitFrame();39 //mVisibilityManager->GetCullingManager()->InitFrame(); 39 40 40 41 // standard scenemanager rendering without hierarchical culling … … 56 57 setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); 57 58 SceneManager::_renderVisibleObjects(); 59 58 60 #ifdef GTP_VISIBILITY_MODIFIED_OGRE 59 61 _deleteRenderedQueueGroups(); … … 65 67 setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); 66 68 67 //-- the hierarchical culling algorithm 69 70 /** 71 * the hierarchical culling algorithm 72 **/ 68 73 mVisibilityManager->ApplyVisibilityCulling(); 74 69 75 70 76 #ifdef GTP_VISIBILITY_MODIFIED_OGRE … … 83 89 // does nothing if hierarchical culling is used => 84 90 // we interleave identification and rendering of objects 85 // in _renderVisibibleObjects 91 // in _renderVisibibleObjects 92 getRenderQueue()->clear(); 93 94 if (!mUseVisibilityCulling) 95 { 96 OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters); 97 return; 98 } 99 100 //-- show visibile scene nodes and octree bounding boxes from last frame 86 101 if (mShowVisualization) 87 102 { 88 for ( BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it ) 103 // add cull camera for visualization purpose 104 if (mCullCamera) 105 { 106 Camera *c; 107 if ((c = getCamera("CullCamera")) != NULL) 108 { 109 getRenderQueue()->addRenderable(c); 110 } 111 } 112 113 for (NodeList::iterator it = mVisible.begin(); it != mVisible.end(); ++it) 89 114 { 90 115 getRenderQueue()->addRenderable(*it); 91 116 } 92 } 93 94 getRenderQueue()->clear(); 117 for (BoxList::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) 118 { 119 getRenderQueue()->addRenderable(*it); 120 } 121 } 122 123 mVisible.clear(); 95 124 mBoxes.clear(); 96 mVisible.clear();97 98 if(!mUseVisibilityCulling)99 {100 OctreeSceneManager::_findVisibleObjects(cam, onlyShadowCasters);101 }102 125 } 103 126 //----------------------------------------------------------------------- … … 126 149 return true; 127 150 } 128 151 if (key == "SkyBoxEnabled") 152 { 153 mSkyBoxEnabled = (*static_cast<const bool *>(val)); 154 return true; 155 } 156 if (key == "SkyPlaneEnabled") 157 { 158 mSkyPlaneEnabled = (*static_cast<const bool *>(val)); 159 return true; 160 } 161 if (key == "SkyDomeEnabled") 162 { 163 mSkyDomeEnabled = (*static_cast<const bool *>(val)); 164 return true; 165 } 129 166 return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). 130 167 setOption(key, val) || TerrainSceneManager::setOption(key, val); … … 139 176 } 140 177 141 142 178 return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). 143 179 getOption(key, val) && TerrainSceneManager::getOption(key, val); … … 169 205 mShowVisualization = showViz; 170 206 } 207 /* 208 //----------------------------------------------------------------------- 209 void SetSkyBoxEnabled(bool enabled) 210 { 211 mSkyBoxEnabled = enabled; 212 } 213 //----------------------------------------------------------------------- 214 void SetSkyPlaneEnabled(bool enabled) 215 { 216 mSkyPlaneEnabled = enabled; 217 } 218 //----------------------------------------------------------------------- 219 void SetSkyDomeEnabled(bool enabled) 220 { 221 mSkyDomeEnabled = enabled; 222 } */ 171 223 //----------------------------------------------------------------------- 172 224 void VisibilityTerrainSceneManager::WriteLog() -
trunk/VUT/work/TestCulling/TestCullingApplication.cpp
r99 r100 292 292 mShowVisualization = !mShowVisualization; 293 293 294 mSceneMgr->setOption(" CullCamera", &mShowVisualization);294 mSceneMgr->setOption("ShowVisualization", &mShowVisualization); 295 295 } 296 296 //----------------------------------------------------------------------- -
trunk/VUT/work/TestCulling/TestCullingApplication.h
r99 r100 97 97 bool mShowVisualization; 98 98 99 Camera *mVi sualizationCamera;99 Camera *mVizCamera; 100 100 }; 101 101 -
trunk/VUT/work/TestCullingTerrain/TestCullingTerrain.vcproj
r83 r100 72 72 <Tool 73 73 Name="VCCLCompilerTool" 74 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Samples\Common\include";"$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\ PlugIns\OctreeSceneManager\include";"$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\include";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";..\..\GtpVisibility\include;..\include;..\TestCulling"74 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Samples\Common\include";"$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\ReferenceApplication\ReferenceAppLayer\include";"$(OGRE_PATH)\PlugIns\OctreeSceneManager\include";"$(OGRE_ADDONS_PATH)\dotsceneoctree\PlugIns\DotSceneManager\include";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";..\..\GtpVisibility\include;..\include;..\TestCulling" 75 75 PreprocessorDefinitions="_WINDOWS;_STLP_USE_DYNAMIC_LIB;OGRE_LIBRARY_IMPORTS;_RELEASE;WIN32;_STLP_RELEASE;GTP_VISIBILITY_MODIFIED_OGRE" 76 76 RuntimeLibrary="2" -
trunk/VUT/work/TestCullingTerrain/TestCullingTerrainApplication.cpp
r99 r100 13 13 #include <OgreMemoryMacros.h> 14 14 15 #include "Ogre.h" 15 #include <Ogre.h> 16 #include "OgreReferenceAppLayer.h" 17 //#include "OgreRefAppWorld.h" 16 18 #include "TestCullingTerrainApplication.h" 17 19 … … 19 21 #include <windows.h> 20 22 23 #define VIZ_VIEWPORT_Z_ORDER 10 21 24 22 25 /*******************************************************/ 23 26 /* TestCullingTerrainApplication implementation */ 24 27 /*******************************************************/ 28 29 //----------------------------------------------------------------------- 25 30 TestCullingTerrainApplication::~TestCullingTerrainApplication() 26 31 { … … 33 38 { 34 39 // create the camera 35 mCamera = mSceneMgr->createCamera("PlayerCam"); 36 37 // set a nice viewpoint 38 mCamera->setPosition(707, 2500, 528); 39 mCamera->setOrientation(Quaternion(-0.3486, 0.0122, 0.9365, 0.0329)); 40 41 //--create visualization camera 42 mVisualizationCamera = mSceneMgr->createCamera("VizCam"); 43 mVisualizationCamera->setPosition(mCamera->getPosition()); 44 mVisualizationCamera->setOrientation(mCamera->getOrientation()); 45 46 mVisualizationCamera->setNearClipDistance(1); 40 mCamera = mSceneMgr->createCamera("CullCamera"); 41 42 /** set a nice viewpoint 43 * we use a camera node here and apply all transformations on it instead 44 * of applying all transformations directly to the camera 45 * because then the camera is displayed correctly in the visualization 46 */ 47 48 mCamNode = mSceneMgr->getRootSceneNode()->createChildSceneNode( 49 "CamNode1", Vector3(707, 5000, 528)); 50 //mCamera->setPosition(707, 5000, 528); 51 mCamNode->setOrientation(Quaternion(-0.3486, 0.0122, 0.9365, 0.0329)); 52 53 mCamNode->attachObject(mCamera); 54 55 //-- create visualization camera 56 mVizCamera = mSceneMgr->createCamera("VizCam"); 57 mVizCamera->setPosition(mCamNode->getPosition()); 58 59 mVizCamera->setNearClipDistance(1); 47 60 mCamera->setNearClipDistance(1); 48 61 … … 50 63 if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE)) 51 64 { 52 mVi sualizationCamera->setFarClipDistance(0);65 mVizCamera->setFarClipDistance(0); 53 66 mCamera->setFarClipDistance(0); 54 67 } 55 68 else 56 69 { 57 mVi sualizationCamera->setFarClipDistance(1000);70 mVizCamera->setFarClipDistance(1000); 58 71 mCamera->setFarClipDistance(1000); 59 72 } … … 84 97 // Accept default settings: point light, white diffuse, just set position 85 98 // NB I could attach the light to a SceneNode if I wanted it to move automatically with 86 // 99 // other objects, but I don't 87 100 l->setPosition(20,80,50); 88 101 … … 95 108 96 109 // Create a skybox 97 mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 3500, false);110 mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 7000, false); 98 111 //mSceneMgr->setSkyDome( true, "Examples/CloudySky", 5, 8, 500, false ); 99 112 … … 104 117 mSceneMgr->setWorldGeometry(terrain_cfg); 105 118 106 // CEGUI setup119 //-- CEGUI setup 107 120 setupGui(); 121 122 //-- terrain content setup 123 108 124 // HACK: necessary to call once before the content creation for 109 125 // terrain initialisation … … 138 154 { 139 155 mFrameListener= new MouseQueryListener(mWindow, mCamera, mSceneMgr, 140 mGUIRenderer, mTerrainContentGenerator, mVi sualizationCamera);156 mGUIRenderer, mTerrainContentGenerator, mVizCamera, mCamNode); 141 157 mFrameListener->showDebugOverlay(true); 142 158 mRoot->addFrameListener(mFrameListener); … … 155 171 CEGUI::Renderer *renderer, 156 172 TerrainContentGenerator *sceneGenerator, 157 Camera *vizCamera): 173 Camera *vizCamera, 174 SceneNode *camNode): 158 175 ExampleFrameListener(win, cam, false, true), 159 176 mGUIRenderer(renderer), … … 169 186 mUseVisibilityCulling(true), 170 187 mUseOptimization(true), 171 mVisualizationCamera(vizCamera) 188 mVizCamera(vizCamera), 189 mShowVisualization(false), 190 mVizCameraHeight(Real(2500.0)), 191 mCamNode(camNode), 192 mCullCamera(true) 172 193 { 173 194 // Reduce move speed … … 213 234 mSceneMgr->setOption("UseVisibilityCulling", &mUseVisibilityCulling); 214 235 mSceneMgr->setOption("ShowOctree", &mShowOctree); 236 mSceneMgr->setOption("CullCamera", &mCullCamera); 215 237 216 238 pOver->show(); 217 239 } 218 240 //----------------------------------------------------------------------- 219 MouseQueryListener::~MouseQueryListener( 241 MouseQueryListener::~MouseQueryListener() 220 242 { 221 243 delete mRayQueryExecutor; 222 244 } 223 245 //----------------------------------------------------------------------- 224 void MouseQueryListener::mouseMoved 246 void MouseQueryListener::mouseMoved(MouseEvent *e) 225 247 { 226 248 // Update CEGUI with the mouse motion 227 CEGUI::System::getSingleton().injectMouseMove(e->getRelX() * mGUIRenderer->getWidth(),228 e->getRelY() * mGUIRenderer->getHeight());249 CEGUI::System::getSingleton().injectMouseMove(e->getRelX() * 250 mGUIRenderer->getWidth(), e->getRelY() * mGUIRenderer->getHeight()); 229 251 } 230 252 //----------------------------------------------------------------------- … … 252 274 CEGUI::MouseCursor::getSingleton().hide(); 253 275 mRMouseDown = true; 254 } // else if276 } 255 277 } // mousePressed 256 278 //----------------------------------------------------------------------- … … 279 301 Ray mouseRay = mCamera->getCameraToViewportRay(e->getX(), e->getY()); 280 302 281 if (mRayQueryExecutor->executeRayQuery(&queryResult, mouseRay))303 if (mRayQueryExecutor->executeRayQuery(&queryResult, mouseRay)) 282 304 { 283 if(mCurrentObject) 305 if (mCurrentObject) 306 { 284 307 mCurrentObject->setPosition(queryResult); 308 } 285 309 } 286 310 } … … 288 312 if (mRMouseDown) 289 313 { 290 mCamera->yaw( -e->getRelX() * mRotateSpeed ); 291 mCamera->pitch( -e->getRelY() * mRotateSpeed ); 314 //mCamera->yaw(-e->getRelX() * mRotateSpeed); 315 //mCamera->pitch(-e->getRelY() * mRotateSpeed); 316 mCamNode->yaw(-e->getRelX() * mRotateSpeed); 317 mCamNode->pitch(-e->getRelY() * mRotateSpeed); 292 318 } 293 319 } … … 295 321 bool MouseQueryListener::frameStarted(const FrameEvent &evt) 296 322 { 297 clamp2Terrain(mCamera); 298 clamp2Terrain(mVisualizationCamera); 323 clamp2Terrain(); 324 325 if (mShowVisualization) 326 { 327 // important for visualization => draw octree bounding boxes 328 mSceneMgr->setOption("ShowOctree", &mShowVisualization); 329 330 // -- setup visualization camera 331 mVizCamera->setPosition(0, 0, 0); 332 mVizCamera->setOrientation(Quaternion::IDENTITY); 333 334 Vector3 camPos = mCamNode->getPosition(); 335 mVizCamera->setPosition(camPos.x, mVizCameraHeight, camPos.z); 336 337 // Point down -Z axis 338 mVizCamera->pitch(Radian(Degree(270.0))); 339 340 // Rotation arounnd X axis 341 mVizCamera->yaw(Math::ATan2(-mCamera->getDerivedDirection().x, 342 -mCamera->getDerivedDirection().z)); 343 } 299 344 300 345 return ExampleFrameListener::frameStarted(evt); 301 346 } 302 void MouseQueryListener::clamp2Terrain(Camera *cam) 347 //----------------------------------------------------------------------- 348 void MouseQueryListener::clamp2Terrain() 303 349 { 304 350 // clamp to terrain 305 Vector3 camPos = cam->getPosition();351 Vector3 camPos = mCamNode->getPosition(); 306 352 Vector3 queryResult; 307 353 308 if (mRayQueryExecutor->executeRayQuery(&queryResult,354 if (mRayQueryExecutor->executeRayQuery(&queryResult, 309 355 Vector3(camPos.x, 5000.0f, camPos.z), Vector3::NEGATIVE_UNIT_Y)) 310 356 { 311 cam->setPosition(cam->getPosition().x, queryResult.y + 10, 312 cam->getPosition().z); 357 mCamNode->setPosition(camPos.x, queryResult.y + 10, camPos.z); 313 358 } 314 359 } … … 324 369 KEY_PRESSED(KC_SPACE, 0.3, nextAlgorithm()); 325 370 326 KEY_PRESSED(KC_SUBTRACT, 0, changeThreshold(-10));327 KEY_PRESSED(KC_ADD, 0, changeThreshold(10));328 371 KEY_PRESSED(KC_O, 0.3, toggleUseOptimization()); 329 KEY_PRESSED(KC_ Y, 0.3, toggleShowOctree());372 KEY_PRESSED(KC_E, 0.3, toggleShowOctree()); 330 373 KEY_PRESSED(KC_C, 0.3, toggleUseVisibilityCulling()); 331 374 KEY_PRESSED(KC_V, 0.3, toggleShowViz()); 332 KEY_PRESSED(KC_X, 0.3, FixVizCamera()); 375 376 if (!mShowVisualization) 377 { 378 KEY_PRESSED(KC_SUBTRACT, 0, changeThreshold(-10)); 379 KEY_PRESSED(KC_ADD, 0, changeThreshold(10)); 380 } 381 else 382 { 383 KEY_PRESSED(KC_SUBTRACT, 0, zoomVizCamera(50)); 384 KEY_PRESSED(KC_ADD, 0, zoomVizCamera(-50)); 385 } 333 386 334 387 updateStats(); 335 //if(mWindow->getViewport(1)) mWindow->getViewport(1)->update(); 336 337 return ExampleFrameListener::frameStarted(evt) && ExampleFrameListener::frameEnded(evt); 388 389 return ExampleFrameListener::frameStarted(evt) && ExampleFrameListener::frameEnded(evt); 390 } 391 void MouseQueryListener::moveCamera() 392 { 393 mCamNode->yaw(mRotX); 394 mCamNode->pitch(mRotY); 395 mCamNode->translate(mCamNode->getLocalAxes(), mTranslateVector); 338 396 } 339 397 //----------------------------------------------------------------------- … … 349 407 } 350 408 //----------------------------------------------------------------------- 409 bool MouseQueryListener::processUnbufferedKeyInput(const FrameEvent& evt) 410 { 411 if (mInputDevice->isKeyDown(KC_RIGHT)) 412 { 413 mCamNode->yaw(-mRotScale); 414 return true; 415 } 416 if (mInputDevice->isKeyDown(KC_LEFT)) 417 { 418 mCamNode->yaw(mRotScale); 419 return true; 420 } 421 422 return ExampleFrameListener::processUnbufferedKeyInput(evt); 423 } 424 //----------------------------------------------------------------------- 425 void MouseQueryListener::zoomVizCamera(int zoom) 426 { 427 mVizCameraHeight += zoom; 428 if(mVizCameraHeight < 0) mVizCameraHeight = 0; 429 } 430 //----------------------------------------------------------------------- 351 431 void MouseQueryListener::nextAlgorithm() 352 432 { … … 396 476 mSceneMgr->setOption("UseOptimization", &mUseOptimization); 397 477 398 if (mUseOptimization)478 if (mUseOptimization) 399 479 mUseOptimizationInfo->setCaption(": true"); 400 480 else … … 420 500 mShowVisualization = !mShowVisualization; 421 501 422 // create viewport with priority 10: will be rendered over standard viewport 423 if(mShowVisualization) 502 // create viewport with priority VIZ_VIEWPORT_Z_ORDER: 503 // will be rendered over standard viewport 504 if (mShowVisualization) 424 505 { 425 mWindow->addViewport(mVisualizationCamera, 10, 0.5, 0.5, 1, 1); 426 mWindow->getViewport(1)->setClearEveryFrame(true); 506 Viewport *vizvp = mWindow->addViewport(mVizCamera, 507 VIZ_VIEWPORT_Z_ORDER, 0.6, 0, 0.4, 0.4); 508 509 vizvp->setBackgroundColour(ColourValue(0.0, 0.3, 0.2, 1)); 510 511 vizvp->setOverlaysEnabled(false); 512 // Alter the camera aspect ratio to match the viewport 513 mVizCamera->setAspectRatio(Real(vizvp->getActualWidth()) / 514 Real(vizvp->getActualHeight())); 515 516 //vizvp->setClearEveryFrame(false); 517 518 // Create a skyplane (for visualization) 519 /*Plane plane; 520 plane.d = 1000; 521 plane.normal = Vector3::UNIT_Y; 522 mSceneMgr->setSkyPlane( true, plane, "Examples/MyTransparentTest", 4000, 75, true);*/ 523 427 524 } 428 525 else 429 526 { 430 mWindow->removeViewport(10); 431 } 432 } 433 //----------------------------------------------------------------------- 434 void MouseQueryListener::FixVizCamera() 435 { 436 mVisualizationCamera->setPosition(mCamera->getPosition()); 437 mVisualizationCamera->setOrientation(mCamera->getOrientation()); 438 clamp2Terrain(mVisualizationCamera); 439 } 440 527 mWindow->removeViewport(VIZ_VIEWPORT_Z_ORDER); 528 // if octree was enabled for visualization purpose 529 mSceneMgr->setOption("ShowOctree", &mShowOctree); 530 } 531 } 441 532 //----------------------------------------------------------------------- 442 533 void MouseQueryListener::keyPressed(KeyEvent* e) … … 475 566 void VisualizationRenderTargetListener::preViewportUpdate(const RenderTargetViewportEvent &evt) 476 567 { 477 const bool b = evt.source->getZOrder() == 10; // visualization viewport 478 479 mSceneMgr->setOption("ShowVisualization", &b); 568 const bool showViz = evt.source->getZOrder() == VIZ_VIEWPORT_Z_ORDER; // visualization viewport 569 const bool nShowViz = !showViz; 570 571 mSceneMgr->setOption("ShowVisualization", &showViz); 572 mSceneMgr->setOption("SkyBoxEnabled", &nShowViz); 573 //mSceneMgr->setOption("SkyPlaneEnabled", &showViz); 480 574 481 575 RenderTargetListener::preViewportUpdate(evt); -
trunk/VUT/work/TestCullingTerrain/TestCullingTerrainApplication.h
r99 r100 8 8 #include "VisibilityEnvironment.h" 9 9 #include <OgreRenderTargetListener.h> 10 10 11 11 12 Real timeDelay = 0; … … 43 44 44 45 MouseQueryListener(RenderWindow* win, Camera* cam, SceneManager *sceneManager, 45 CEGUI::Renderer *renderer, TerrainContentGenerator *contentGenerator, Camera *vizCamera); 46 CEGUI::Renderer *renderer, TerrainContentGenerator *contentGenerator, Camera *vizCamera, 47 SceneNode *camNode); 46 48 47 49 ~MouseQueryListener(); … … 49 51 bool frameStarted(const FrameEvent& evt); 50 52 bool frameEnded(const FrameEvent& evt); 53 bool processUnbufferedKeyInput(const FrameEvent& evt); 54 51 55 52 56 /* MouseListener callbacks. */ … … 80 84 void toggleUseVisibilityCulling(); 81 85 void toggleShowViz(); 82 void FixVizCamera(); 86 void zoomVizCamera(int zoom); 87 void moveCamera(); 83 88 84 89 protected: 85 void clamp2Terrain( Camera *cam);90 void clamp2Terrain(); 86 91 87 92 bool mLMouseDown, mRMouseDown; // True if the mouse buttons are down … … 115 120 bool mUseVisibilityCulling; 116 121 bool mShowVisualization; 122 bool mCullCamera; 117 123 118 Camera *mVisualizationCamera; 124 Real mVizCameraHeight; 125 126 Camera *mVizCamera; 127 SceneNode *mCamNode; 128 119 129 }; 120 130 … … 149 159 TerrainContentGenerator *mTerrainContentGenerator; 150 160 151 Camera *mVisualizationCamera; 161 Camera *mVizCamera; 162 SceneNode *mCamNode; 152 163 VisualizationRenderTargetListener *mRenderTargetListener; 153 164
Note: See TracChangeset
for help on using the changeset viewer.