Changeset 2123
- Timestamp:
- 02/17/07 22:48:12 (18 years ago)
- Location:
- GTP/trunk
- Files:
-
- 2 added
- 29 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrain.vcproj
r2121 r2123 22 22 Optimization="0" 23 23 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;..\..\Ogre\include;..\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\OGRE\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\include" 24 PreprocessorDefinitions="_WINDOWS;_STLP_USE_DYNAMIC_LIB;OGRE_LIBRARY_IMPORTS;_DEBUG;WIN32;_STLP_DEBUG; PLUGIN_TERRAIN_IMPORTS;GTP_VISIBILITY_MODIFIED_OGRE"24 PreprocessorDefinitions="_WINDOWS;_STLP_USE_DYNAMIC_LIB;OGRE_LIBRARY_IMPORTS;_DEBUG;WIN32;_STLP_DEBUG;GTP_VISIBILITY_MODIFIED_OGRE" 25 25 MinimalRebuild="TRUE" 26 26 BasicRuntimeChecks="3" … … 35 35 <Tool 36 36 Name="VCLinkerTool" 37 AdditionalDependencies="Plugin_OctreeSceneManager.lib Plugin_VisibilitySceneManager.lib GtpVisibility.lib Preprocessor.lib OGREMain_d.LIB CEGUIBase_d.lib OgreGUIRenderer_d.lib zdll.lib zziplibd.lib "37 AdditionalDependencies="Plugin_OctreeSceneManager.lib Plugin_VisibilitySceneManager.lib GtpVisibility.lib Preprocessor.lib OGREMain_d.LIB CEGUIBase_d.lib OgreGUIRenderer_d.lib zdll.lib zziplibd.lib IVReader.lib" 38 38 OutputFile="$(OGRE_PATH)/Samples/Common/bin/Debug/TestCullingTerrain.exe" 39 39 LinkIncremental="1" 40 AdditionalLibraryDirectories=""$(OGRE_PATH)\Dependencies\Lib\$(ConfigurationName)";"$(OGRE_PATH)\OgreMain\Lib\$(ConfigurationName)";"$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\OGRE\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\Preprocessing\lib\$(ConfigurationName)" "40 AdditionalLibraryDirectories=""$(OGRE_PATH)\Dependencies\Lib\$(ConfigurationName)";"$(OGRE_PATH)\OgreMain\Lib\$(ConfigurationName)";"$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\OGRE\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\Preprocessing\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\lib\$(ConfigurationName)"" 41 41 GenerateDebugInformation="TRUE" 42 42 ProgramDatabaseFile="$(OutDir)/TestCullingTerrain.pdb" … … 78 78 EnableIntrinsicFunctions="TRUE" 79 79 FavorSizeOrSpeed="1" 80 OmitFramePointers="TRUE" 80 81 EnableFiberSafeOptimizations="TRUE" 81 82 OptimizeForProcessor="0" 82 83 OptimizeForWindowsApplication="TRUE" 83 84 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_PATH)\Samples\Common\CEGUIRenderer\include";..\..\Ogre\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\include;..\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\OGRE\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\include" 84 PreprocessorDefinitions="_WINDOWS;_STLP_USE_DYNAMIC_LIB;OGRE_LIBRARY_IMPORTS;_RELEASE;WIN32;_STLP_RELEASE;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE 1;USE_VERBOSE_PVS"85 PreprocessorDefinitions="_WINDOWS;_STLP_USE_DYNAMIC_LIB;OGRE_LIBRARY_IMPORTS;_RELEASE;WIN32;_STLP_RELEASE;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE" 85 86 RuntimeLibrary="2" 86 87 RuntimeTypeInfo="TRUE" -
GTP/trunk/App/Demos/Vis/HillyTerrain/OGRE/TestCullingTerrainApplication.cpp
r2121 r2123 282 282 * because then the camera is displayed correctly in the visualization 283 283 */ 284 // Vector3 viewPoint(707, 5000, 528);284 // hack: vienna view point 285 285 Vector3 viewPoint(830, 300, -540); 286 std::stringstream d; d << "here3: " << viewPoint; 287 Ogre::LogManager::getSingleton().logMessage(d.str()); 286 288 287 mCamNode = mSceneMgr->getRootSceneNode()-> 289 288 createChildSceneNode("CamNode1", viewPoint); … … 454 453 { 455 454 ///////// 456 //-- load scene455 //-- load parameters & scene 457 456 loadConfig("terrainCulling.cfg"); 458 459 if (0 && !LoadScene(mFilename))460 LogManager::getSingleton().logMessage("error loading scene");461 462 457 463 458 ///////////////////////////////////// … … 502 497 mSceneMgr->setWorldGeometry(terrain_cfg); 503 498 499 // was terrain loaded? 504 500 mSceneMgr->getOption("ShowTerrain", &msShowHillyTerrain); 505 501 } 506 502 503 // hack view point for terrain 504 if (msShowHillyTerrain) 505 { 506 Vector3 viewPoint(707, 5000, 528); 507 mCamNode->setPosition(viewPoint); 508 } 509 507 510 ////// 508 511 //-- CEGUI setup -
GTP/trunk/Lib/Vis/GtpVisibility.sln
r2110 r2123 16 16 {101A7691-74F3-48B4-96A3-CF35578F5900} = {101A7691-74F3-48B4-96A3-CF35578F5900} 17 17 {EABCE292-D598-4600-A1C9-2591E7D62FDA} = {EABCE292-D598-4600-A1C9-2591E7D62FDA} 18 {7319E499-473D-4CE5-9983-725D6E68A55D} = {7319E499-473D-4CE5-9983-725D6E68A55D} 19 {7319E499-473D-4CE5-9983-725D6E68A55D} = {7319E499-473D-4CE5-9983-725D6E68A55D} 18 20 EndProjectSection 19 21 EndProject … … 465 467 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release Internal.ActiveCfg = Release Internal|Win32 466 468 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release Internal.Build.0 = Release Internal|Win32 467 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release Static.ActiveCfg = Release Internal|Win32468 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release Static.Build.0 = Release Internal|Win32469 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release Static.ActiveCfg = Release|Win32 470 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release Static.Build.0 = Release|Win32 469 471 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release_Internal.ActiveCfg = Release_Internal|Win32 470 472 {7319E499-473D-4CE5-9983-725D6E68A55D}.Release_Internal.Build.0 = Release_Internal|Win32 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/IVReader/src/IVReader.vcproj
r2122 r2123 24 24 MinimalRebuild="TRUE" 25 25 BasicRuntimeChecks="3" 26 RuntimeLibrary=" 1"26 RuntimeLibrary="3" 27 27 UsePrecompiledHeader="0" 28 28 WarningLevel="3" … … 73 73 Name="VCCLCompilerTool" 74 74 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\Samples\Common\include";..\include" 75 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;IVREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE 1;USE_VERBOSE_PVS"75 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;IVREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE" 76 76 RuntimeLibrary="2" 77 77 UsePrecompiledHeader="0" -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreBoundingBoxConverter.h
r2115 r2123 217 217 218 218 // we are only interested in scene entities 219 if (mo->getMovableType() != "Entity") 219 if ((mo->getMovableType() != "Entity") && 220 (mo->getMovableType() != "ManualObject")) 220 221 continue; 221 222 … … 237 238 } 238 239 240 static void AddToObjects(EntityContainer *entites, 241 GtpVisibilityPreprocessor::ObjectContainer &objects, 242 const int id) 243 { 244 // TODO: can actually just put single objects into pvs with same id, 245 // this can be sorted out later!! 246 #if 0 247 EntityContainer::const_iterator eit, eit_end = entryObjects.end(); 248 249 for (eit = entryObjects.begin(); eit != eit_end; ++ eit) 250 { 251 Entity *ent = *eit; 252 253 // warning: multiple ids possible 254 OgreMeshInstance *omi = new OgreMeshInstance(ent); 255 omi->SetId(id); 256 objects.push_back(omi); 257 } 258 259 delete entryObjects; 260 261 #else 262 263 EngineIntersectable *entry = new EngineIntersectable(entites); 264 265 entry->SetId(id); 266 objects.push_back(entry); 267 #endif 268 } 269 239 270 #if USE_KD_PVS 240 271 //------------------------------------------------------------------------- … … 255 286 OgreTypeConverter::ConvertToOgre(pbox); 256 287 257 EntityContainer entryObjects;288 EntityContainer *entryObjects = new EntityContainer(); 258 289 259 290 // find all objects that intersect the bounding box 260 FindIntersectingObjects(box, entryObjects); 261 262 // TODO: can actually just put single objects into pvs with same id, 263 // this can be sorted out later!! 264 #if 1 265 EntityContainer::const_iterator eit, eit_end = entryObjects.end(); 266 267 for (eit = entryObjects.begin(); eit != eit_end; ++ eit) 268 { 269 Entity *ent = *eit; 270 271 // warning: multiple ids possible 272 OgreMeshInstance *omi = new OgreMeshInstance(ent); 273 omi->SetId(id); 274 objects.push_back(omi); 275 } 276 #else 277 EngineIntersectable *entry = 278 new EngineIntersectable(entryObjects); 279 280 entry->SetId(id); 281 objects.push_back(entry); 282 #endif 291 FindIntersectingObjects(box, *entryObjects); 292 293 AddToObjects(entryObjects, objects, id); 283 294 } 284 295 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/include/OgreOcclusionCullingSceneManager.h
r2119 r2123 14 14 #include "ViewCellsManager.h" 15 15 16 17 namespace GtpVisibilityPreprocessor { 18 class Intersectable; 19 } 20 21 class ObjReader; 22 16 23 namespace Ogre { 17 24 … … 24 31 { 25 32 public: 26 OcclusionCullingSceneManager(const String& name, GtpVisibility::VisibilityManager *visManager); 33 OcclusionCullingSceneManager(const String& name, 34 GtpVisibility::VisibilityManager *visManager); 27 35 ~OcclusionCullingSceneManager(); 28 36 … … 70 78 */ 71 79 bool validatePassForRendering(Pass* pass); 80 72 81 #ifdef ITEM_BUFFER 73 82 void RenderItemBuffer(RenderPriorityGroup* pGroup); 74 83 void RenderSingleObjectForItemBuffer(Renderable *rend, Pass *pass); 75 84 #endif // ITEM_BUFFER 85 76 86 void _renderQueueGroupObjects(RenderQueueGroup* pGroup, 77 QueuedRenderableCollection::OrganisationMode om); 78 79 /** Override from SceneManager so that sub entities can be assigned an id for item buffer. 87 QueuedRenderableCollection::OrganisationMode om); 88 89 /** Override from SceneManager so that sub entities can be assigned 90 an id for item buffer. 80 91 */ 81 92 Entity* createEntity(const String& entityName, const String& meshName); … … 93 104 void endFrame(); 94 105 95 void renderAdditiveStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup, 96 QueuedRenderableCollection::OrganisationMode om); 97 void renderModulativeStencilShadowedQueueGroupObjects(RenderQueueGroup* pGroup, 98 QueuedRenderableCollection::OrganisationMode om); 106 void renderAdditiveStencilShadowedQueueGroupObjects( 107 RenderQueueGroup* pGroup, 108 QueuedRenderableCollection::OrganisationMode om); 109 void renderModulativeStencilShadowedQueueGroupObjects( 110 RenderQueueGroup* pGroup, 111 QueuedRenderableCollection::OrganisationMode om); 99 112 100 113 /** Override standard function so octree boxes are always of equal side length. … … 113 126 protected: 114 127 128 void MailPvsObjects(); 129 void RenderPvsEntry(GtpVisibilityPreprocessor::Intersectable *obj); 130 void SetObjectVisible(GtpVisibilityPreprocessor::Intersectable *entry, 131 const bool visible); 132 void ShowViewCellsGeometry(); 133 115 134 /** Creates material for depth pass, e.g., a pass that only fills the depth buffer. 116 135 */ … … 254 273 255 274 bool mShowTerrain; 275 276 ObjReader *mObjReader; 256 277 }; 257 278 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreBvHierarchySceneManager.cpp
r2115 r2123 1354 1354 while (pit.HasMoreEntries()) 1355 1355 { 1356 GtpVisibilityPreprocessor:: ObjectPvsEntryentry = pit.Next();1357 1358 if (entry .mObject)1359 { 1360 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry .mObject);1356 GtpVisibilityPreprocessor::Intersectable *entry = pit.Next(); 1357 1358 if (entry) 1359 { 1360 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry); 1361 1361 omi->GetEntity()->setVisible(load); 1362 1362 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreKdTreeSceneManager.cpp
r2115 r2123 1355 1355 while (pit.HasMoreEntries()) 1356 1356 { 1357 GtpVisibilityPreprocessor:: ObjectPvsEntryentry = pit.Next();1358 1359 if (entry .mObject)1360 { 1361 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry .mObject);1357 GtpVisibilityPreprocessor::Intersectable *entry = pit.Next(); 1358 1359 if (entry) 1360 { 1361 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry); 1362 1362 omi->GetEntity()->setVisible(load); 1363 1363 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/OgreOcclusionCullingSceneManager.cpp
r2122 r2123 78 78 // TODO: set maxdepth to reasonable value 79 79 mMaxDepth = 50; 80 81 mObjReader = new ObjReader(this); 80 82 } 81 83 //----------------------------------------------------------------------- … … 107 109 CLEAR_CONTAINER(mObjects); 108 110 OGRE_DELETE(mCurrentViewCell); 111 112 OGRE_DELETE(mObjReader); 109 113 } 110 114 //----------------------------------------------------------------------- … … 379 383 selectPageSource(pageSourceName, optlist); 380 384 } 385 386 387 void OcclusionCullingSceneManager::MailPvsObjects() 388 { 389 GtpVisibilityPreprocessor::ObjectPvsIterator pit = 390 mCurrentViewCell->GetPvs().GetIterator(); 391 392 while (pit.HasMoreEntries()) 393 { 394 GtpVisibilityPreprocessor::Intersectable *obj = pit.Next(); 395 396 if (obj->Type() != 397 GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE) 398 continue; 399 400 EngineIntersectable *oi = static_cast<EngineIntersectable *>(obj); 401 402 EntityContainer *entries = oi->GetItem(); 403 EntityContainer::const_iterator eit, eit_end = entries->end(); 404 405 for (eit = entries->begin(); eit != eit_end; ++ eit) 406 { 407 (*eit)->setUserAny(Any((int)0)); 408 } 409 } 410 } 411 //----------------------------------------------------------------------- 412 void OcclusionCullingSceneManager::ShowViewCellsGeometry() 413 {/* 414 // show only current view cell 415 if (!mShowViewCells) 416 { 417 const int id = mCurrentViewCell->GetId(); 418 419 MovableMap::iterator fit = mViewCellsGeometry.find(id); 420 421 if ((fit != mViewCellsGeometry.end()) && (*fit).second) 422 (*fit).second->_updateRenderQueue(getRenderQueue()); 423 } 424 else 425 { 426 MovableMap::const_iterator mit, mit_end = mViewCellsGeometry.end(); 427 428 for (mit = mViewCellsGeometry.begin(); mit != mit_end; ++ mit) 429 { 430 if ((*mit).second) 431 (*mit).second->_updateRenderQueue(getRenderQueue()); 432 } 433 }*/ 434 } 435 436 437 void OcclusionCullingSceneManager::RenderPvsEntry(GtpVisibilityPreprocessor::Intersectable *obj) 438 { 439 switch (obj->Type()) 440 { 441 case GtpVisibilityPreprocessor::Intersectable::OGRE_MESH_INSTANCE: 442 { 443 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(obj); 444 omi->GetEntity()->_updateRenderQueue(getRenderQueue()); 445 } 446 break; 447 448 case GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE: 449 { 450 EngineIntersectable *oi = static_cast<EngineIntersectable *>(obj); 451 452 EntityContainer *entries = oi->GetItem(); 453 EntityContainer::const_iterator eit, eit_end = entries->end(); 454 455 for (eit = entries->begin(); eit != eit_end; ++ eit) 456 { 457 Entity *ent = *eit; 458 // mailing hack 459 Any newAny = ent->getUserAny(); 460 int flt = any_cast<int>(newAny); 461 462 if (any_cast<int>(newAny) == 0) 463 { 464 ent->setUserAny(Any((int)1)); 465 ent->_updateRenderQueue(getRenderQueue()); 466 } 467 } 468 } 469 break; 470 default: 471 break; 472 } 473 } 474 //----------------------------------------------------------------------- 475 void OcclusionCullingSceneManager::SetObjectVisible(GtpVisibilityPreprocessor::Intersectable *entry, 476 const bool visible) 477 { 478 switch (entry->Type()) 479 { 480 case GtpVisibilityPreprocessor::Intersectable::OGRE_MESH_INSTANCE: 481 { 482 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry); 483 omi->GetEntity()->setVisible(visible); 484 //GtpVisibilityPreprocessor::Debug << "assigned id " << omi->GetId() << endl; 485 } 486 break; 487 case GtpVisibilityPreprocessor::Intersectable::ENGINE_INTERSECTABLE: 488 { 489 EngineIntersectable *oi = static_cast<EngineIntersectable *>(entry); 490 491 EntityContainer *entries = oi->GetItem(); 492 EntityContainer::const_iterator eit, eit_end = entries->end(); 493 for (eit = entries->begin(); eit != eit_end; ++ eit) 494 { 495 Entity *ent = *eit; 496 ent->setVisible(visible); 497 } 498 } 499 break; 500 default: 501 break; 502 } 503 } 381 504 //----------------------------------------------------------------------- 382 505 void OcclusionCullingSceneManager::PrepareVisualization(Camera *cam) … … 404 527 405 528 // show current view cell geometry 406 if (mCurrentViewCell && mCurrentViewCell->GetMesh())407 { /*529 if (mCurrentViewCell)// && mCurrentViewCell->GetMesh()) 530 { 408 531 //const bool showSingleViewCell = true; 409 532 if (mViewCellsGeometryLoaded) 410 533 { 411 if (!mShowViewCells) 412 { 413 const int id = mCurrentViewCell->GetId(); 414 415 MovableMap::iterator fit = mViewCellsGeometry.find(id); 416 417 if ((fit != mViewCellsGeometry.end()) && (*fit).second) 418 (*fit).second->_updateRenderQueue(getRenderQueue()); 419 } 420 else 421 { 422 MovableMap::const_iterator mit, mit_end = mViewCellsGeometry.end(); 423 424 for (mit = mViewCellsGeometry.begin(); mit != mit_end; ++ mit) 425 { 426 if ((*mit).second) 427 (*mit).second->_updateRenderQueue(getRenderQueue()); 428 } 429 } 430 } 431 */ 534 ShowViewCellsGeometry(); 535 } 536 432 537 ////////// 433 538 //-- set PVS of view cell visible 434 539 435 GtpVisibilityPreprocessor::ObjectPvsIterator pit = mCurrentViewCell->GetPvs().GetIterator(); 540 GtpVisibilityPreprocessor::ObjectPvsIterator pit = 541 mCurrentViewCell->GetPvs().GetIterator(); 542 543 MailPvsObjects(); 436 544 437 545 while (pit.HasMoreEntries()) 438 { 439 GtpVisibilityPreprocessor::ObjectPvsEntry entry = pit.Next(); 440 GtpVisibilityPreprocessor::Intersectable *obj = entry.mObject; 441 442 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(obj); 443 omi->GetEntity()->_updateRenderQueue(getRenderQueue()); 444 } 445 446 } 447 /* 546 { 547 RenderPvsEntry(pit.Next()); 548 } 549 } 550 #if 0 448 551 if (mRenderNodesForViz || mRenderNodesContentForViz) 449 552 { … … 479 582 } 480 583 } 481 }*/ 584 } 585 #endif 482 586 } 483 587 //----------------------------------------------------------------------- … … 601 705 { 602 706 // $$matt temp: Remove this!! 603 if ( 1)707 if (0) 604 708 { 605 709 getDestinationRenderSystem()->_setCullingMode(CULL_NONE); 606 LogManager::getSingleton().logMessage("warning: culling mode");710 //LogManager::getSingleton().logMessage("warning: culling mode"); 607 711 } 608 712 … … 1367 1471 GtpVisibilityPreprocessor::Intersectable *entry = *it; 1368 1472 1369 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(entry); 1370 omi->GetEntity()->setVisible(visible); 1371 //GtpVisibilityPreprocessor::Debug << "assigned id " << omi->GetId() << endl; 1473 SetObjectVisible(entry, visible); 1372 1474 } 1373 1475 } … … 1421 1523 } 1422 1524 1423 GtpVisibilityPreprocessor::ObjectPvsIterator pit = vc->GetPvs().GetIterator();1424 1425 1525 //////////// 1426 1526 //-- set PVS of view cell to visible … … 1429 1529 //LogManager::getSingleton().logMessage(d.str()); 1430 1530 1531 GtpVisibilityPreprocessor::ObjectPvsIterator pit = vc->GetPvs().GetIterator(); 1532 1431 1533 while (pit.HasMoreEntries()) 1432 1534 { 1433 GtpVisibilityPreprocessor::ObjectPvsEntry entry = pit.Next(); 1434 GtpVisibilityPreprocessor::Intersectable *obj = entry.mObject; 1535 GtpVisibilityPreprocessor::Intersectable *obj = pit.Next(); 1435 1536 1436 1537 // no associated geometry found 1437 1538 if (!obj) continue; 1438 1539 1439 OgreMeshInstance *omi = static_cast<OgreMeshInstance *>(obj); 1440 omi->GetEntity()->setVisible(load); 1540 SetObjectVisible(obj, load); 1441 1541 } 1442 1542 } … … 1706 1806 SceneNode *root) 1707 1807 { 1708 ObjReader objReader(this);1709 1710 1808 Timer *timer = PlatformManager::getSingleton().createTimer(); 1711 1809 timer->reset(); 1712 1810 1713 if (! objReader.LoadFile(filename.c_str(), viewCellsFile, root))1811 if (!mObjReader->LoadFile(filename.c_str(), viewCellsFile, root)) 1714 1812 { 1715 1813 PlatformManager::getSingleton().destroyTimer(timer); -
GTP/trunk/Lib/Vis/OnlineCullingCHC/OGRE/src/Plugin_VisibilitySceneManager.vcproj
r2122 r2123 20 20 Name="VCCLCompilerTool" 21 21 Optimization="0" 22 AdditionalIncludeDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\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;..\..\..\OnlineCullingCHC\include;..\..\..\Preprocessing\src "22 AdditionalIncludeDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\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;..\..\..\OnlineCullingCHC\include;..\..\..\Preprocessing\src;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\ObjReader\include" 23 23 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PLUGIN_KD_TERRAIN_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE" 24 24 MinimalRebuild="TRUE" … … 36 36 Name="VCLinkerTool" 37 37 IgnoreImportLibrary="TRUE" 38 AdditionalDependencies="OgreMain_d.lib CEGUIBase_d.lib OgreGUIRenderer_d.lib Plugin_OctreeSceneManager.lib GtpVisibility.lib zdll.lib zziplibd.lib Preprocessor.lib devil.lib glut32.lib xerces-c_2D.lib OpenGL32.Lib glu32.lib cg.lib cgGL.lib glew32.lib "38 AdditionalDependencies="OgreMain_d.lib CEGUIBase_d.lib OgreGUIRenderer_d.lib Plugin_OctreeSceneManager.lib GtpVisibility.lib zdll.lib zziplibd.lib Preprocessor.lib devil.lib glut32.lib xerces-c_2D.lib OpenGL32.Lib glu32.lib cg.lib cgGL.lib glew32.lib IVReader.lib ObjReader.lib" 39 39 OutputFile="$(OutDir)/Plugin_VisibilitySceneManager.dll" 40 40 Version="0.99" 41 41 LinkIncremental="1" 42 42 SuppressStartupBanner="TRUE" 43 AdditionalLibraryDirectories=""$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)";"$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)";"$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"..\lib\$(ConfigurationName)";"..\..\lib\$(ConfigurationName)";"..\..\..\Preprocessing\lib\$(ConfigurationName)";..\..\..\Preprocessing\src\GL;..\..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib;"$(CG_LIB_PATH)" "43 AdditionalLibraryDirectories=""$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)";"$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)";"$(OGRE_PATH)\PlugIns\OctreeSceneManager\bin\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"..\lib\$(ConfigurationName)";"..\..\lib\$(ConfigurationName)";"..\..\..\Preprocessing\lib\$(ConfigurationName)";..\..\..\Preprocessing\src\GL;..\..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib;"$(CG_LIB_PATH)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\ObjReader\lib\$(ConfigurationName)";"..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\lib\$(ConfigurationName)"" 44 44 ModuleDefinitionFile="..\misc\OgreVisibilitySceneManager.def" 45 45 GenerateDebugInformation="TRUE" … … 87 87 OmitFramePointers="TRUE" 88 88 EnableFiberSafeOptimizations="TRUE" 89 OptimizeForProcessor=" 3"89 OptimizeForProcessor="0" 90 90 OptimizeForWindowsApplication="TRUE" 91 AdditionalIncludeDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\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;..\..\..\OnlineCullingCHC\include;..\..\..\Preprocessing\src;..\..\..\ ..\..\Lib\Vis\OnlineCullingCHC\IVReader\include;..\..\..\Preprocessing\src\Timer;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\ObjReader\include"92 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGIN_KD_TERRAIN_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE 1;USE_VERBOSE_PVS"91 AdditionalIncludeDirectories=""$(OGRE_PATH)\PlugIns\OctreeSceneManager\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;..\..\..\OnlineCullingCHC\include;..\..\..\Preprocessing\src;..\..\..\Preprocessing\src\Timer;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\IVReader\include;..\..\..\..\..\Lib\Vis\OnlineCullingCHC\ObjReader\include" 92 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGIN_KD_TERRAIN_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE" 93 93 StringPooling="TRUE" 94 94 RuntimeLibrary="2" -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/include/ObjManualMeshLoader.h
r2111 r2123 2 2 #define __ObjManualMeshLoader_H__ 3 3 4 #include "Ogre.h" 4 5 5 #include "Ogre.h" 6 #include "ObjMeshData.h" 7 6 namespace GtpVisibilityPreprocessor { 7 class BvhLeaf; 8 } 8 9 9 10 class __declspec(dllexport) ObjManualMeshLoader: public Ogre::ManualResourceLoader 10 11 { 11 public: 12 ObjManualMeshLoader(); 13 ObjManualMeshLoader(ObjMeshData *mData); 14 ~ObjManualMeshLoader(); 12 public: 13 ObjManualMeshLoader(GtpVisibilityPreprocessor::BvhLeaf *obj); 14 ~ObjManualMeshLoader(); 15 15 16 16 void loadResource(Ogre::Resource *resource); 17 17 18 Ogre::AxisAlignedBox *getBoundingBox(); 19 private: 20 ObjMeshData *data; 18 protected: 21 19 20 GtpVisibilityPreprocessor::BvhLeaf *mObject; 22 21 }; 23 22 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/include/ObjReader.h
r2122 r2123 7 7 #include "Containers.h" 8 8 9 namespace GtpVisibilityPreprocessor { 10 class Intersectable; 11 } 9 12 10 13 class __declspec(dllexport) ObjReader … … 14 17 ~ObjReader(); 15 18 16 bool LoadFile(const st ring &sceneName,17 const st ring &visibilitySolution,19 bool LoadFile(const std::string &sceneName, 20 const std::string &visibilitySolution, 18 21 Ogre::SceneNode *root); 19 22 void dummy(); 23 Ogre::Entity * dummy2(const std::string &name, 24 GtpVisibilityPreprocessor::Intersectable *object); 20 25 Ogre::Entity *CreateEntity(const std::string &name, 21 26 GtpVisibilityPreprocessor::Intersectable *object); … … 25 30 26 31 Ogre::SceneManager *mSceneManager; 32 GtpVisibilityPreprocessor::ObjectContainer mPvsObjects; 27 33 }; 28 34 -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/src/ObjManualMeshLoader.cpp
r2111 r2123 1 1 #include "ObjManualMeshLoader.h" 2 #include "ObjReader.h" 2 #include "Triangle3.h" 3 #include "IntersectableWrapper.h" 4 #include "BvHierarchy.h" 5 #include "OgreLogManager.h" 3 6 4 ObjManualMeshLoader::ObjManualMeshLoader() 5 { 6 data = NULL; 7 } 7 #define USE_HBL_DISCARD 1 8 8 9 10 ObjManualMeshLoader::ObjManualMeshLoader(ObjMeshData *mData): 11 data(mData) 9 ObjManualMeshLoader::ObjManualMeshLoader(GtpVisibilityPreprocessor::BvhLeaf *obj): 10 mObject(obj) 12 11 { 13 12 } … … 16 15 ObjManualMeshLoader::~ObjManualMeshLoader() 17 16 { 18 if (data != NULL)19 {20 data->collapse();21 delete data;22 }23 }24 25 26 Ogre::AxisAlignedBox *ObjManualMeshLoader::getBoundingBox()27 {28 return data->boundingBox;29 17 } 30 18 … … 33 21 { 34 22 using namespace Ogre; 35 Mesh *pMesh = (Mesh *) resource;36 23 24 Mesh *mesh = (Mesh *) resource; 25 SubMesh* submesh = mesh->createSubMesh(); 37 26 38 Vector3 translation = data->boundingBox->getCenter(); 27 const int triCount = (int)mObject->mObjects.size(); 28 const int vertexCount = triCount * 3; 39 29 40 bool nOk = ((data->normals != NULL) && (data->ncnt > 0)); 41 bool tOk = ((data->texCoords != NULL) && (data->tcnt > 0)); 42 43 pMesh->sharedVertexData = new VertexData(); 30 // We must create the vertex data, indicating how many vertices there will be 31 submesh->useSharedVertices = false; 32 submesh->vertexData = new VertexData(); 33 submesh->vertexData->vertexStart = 0; 34 submesh->vertexData->vertexCount = vertexCount; 44 35 45 VertexDeclaration* vertexDecl = pMesh->sharedVertexData->vertexDeclaration; 36 static const unsigned short source = 0; 37 size_t offset = 0; 46 38 47 size_t currOffset = 0; 48 vertexDecl->addElement(0, currOffset, VET_FLOAT3, VES_POSITION); 49 currOffset += VertexElement::getTypeSize(VET_FLOAT3); 50 if (nOk) 39 // We must now declare what the vertex data contains 40 VertexDeclaration* declaration = submesh->vertexData->vertexDeclaration; 41 42 offset += declaration->addElement(source, offset, VET_FLOAT3, VES_POSITION).getSize(); 43 offset += declaration->addElement(source, offset, VET_FLOAT3, VES_NORMAL).getSize(); 44 //offset += declaration->addElement(source, offset, VET_FLOAT2,VES_TEXTURE_COORDINATES).getSize(); 45 46 HardwareVertexBufferSharedPtr vbuffer = HardwareBufferManager::getSingleton(). 47 createVertexBuffer(declaration->getVertexSize(source), 48 submesh->vertexData->vertexCount, 49 HardwareBuffer::HBU_STATIC_WRITE_ONLY); 50 51 // we get access to the buffer to fill it. During so we record the bounding box. 52 AxisAlignedBox aabox; 53 54 submesh->vertexData->vertexBufferBinding->setBinding(source, vbuffer); 55 #if USE_HBL_DISCARD 56 float* vdata = static_cast<float*>(vbuffer->lock(HardwareBuffer::HBL_DISCARD)); 57 #else 58 float* vdata = static_cast<float *>(vbuffer->lock(HardwareBuffer::HBL_NORMAL)); 59 #endif 60 61 GtpVisibilityPreprocessor::ObjectContainer:: 62 const_iterator oit, oit_end = mObject->mObjects.end(); 63 64 for (oit = mObject->mObjects.begin(); oit != oit_end; ++ oit) 51 65 { 52 vertexDecl->addElement(0, currOffset, VET_FLOAT3, VES_NORMAL); 53 currOffset += VertexElement::getTypeSize(VET_FLOAT3); 54 } 55 if (tOk) 56 { 57 vertexDecl->addElement(0, currOffset, VET_FLOAT2, VES_TEXTURE_COORDINATES); 58 currOffset += VertexElement::getTypeSize(VET_FLOAT2); 59 } 66 GtpVisibilityPreprocessor::TriangleIntersectable *tObj = 67 static_cast<GtpVisibilityPreprocessor::TriangleIntersectable *>(*oit); 68 69 const GtpVisibilityPreprocessor::Triangle3 tri = tObj->GetItem(); 70 const GtpVisibilityPreprocessor::Vector3 n = tri.GetNormal(); 60 71 61 pMesh->sharedVertexData->vertexCount = data->vcnt/3; 62 HardwareVertexBufferSharedPtr vbuf = 63 HardwareBufferManager::getSingleton(). 64 createVertexBuffer(vertexDecl->getVertexSize(0), pMesh->sharedVertexData->vertexCount, 65 HardwareBuffer::HBU_STATIC_WRITE_ONLY, false); 72 for (int i = 0; i < 3; ++ i) 73 { 74 Vector3 vtx(tri.mVertices[i].x, tri.mVertices[i].y, tri.mVertices[i].z); 75 76 *(vdata ++) = vtx.x; 77 *(vdata ++) = vtx.y; 78 *(vdata ++) = vtx.z; 66 79 67 VertexBufferBinding* binding = pMesh->sharedVertexData->vertexBufferBinding; 68 binding->setBinding(0, vbuf); 80 *(vdata ++) = n.x; 81 *(vdata ++) = n.y; 82 *(vdata ++) = n.z; 69 83 70 Real* pVertices = static_cast<Real*>(vbuf->lock(HardwareBuffer::HBL_DISCARD)); 71 72 int offset = 0, size = 3; 73 if (nOk) size += 3; 74 if (tOk) size += 2; 75 for (int i=0; i<data->vcnt/3; i++) 76 { 77 pVertices[i*size] = data->vertices[i*3] - translation.x; 78 pVertices[i*size+1] = data->vertices[i*3+1] - translation.y; 79 pVertices[i*size+2] = data->vertices[i*3+2] - translation.z; 80 81 offset = 3; 82 if (nOk) 83 { 84 pVertices[i*size+offset] = data->normals[i*3]; offset++; 85 pVertices[i*size+offset] = data->normals[i*3+1]; offset++; 86 pVertices[i*size+offset] = data->normals[i*3+2]; offset++; 87 } 88 if (tOk) 89 { 90 pVertices[i*size+offset] = data->texCoords[i*2]; offset++; 91 pVertices[i*size+offset] = -data->texCoords[i*2+1]; offset++; 84 aabox.merge(vtx); 92 85 } 93 86 } 94 87 95 vbuf->unlock(); 88 vbuffer->unlock(); 89 90 #if 0 91 RenderOperation rop; 92 submesh->_getRenderOperation(rop); 93 rop.useIndexes = false; 94 #endif 95 ////// 96 //-- Creates the index data 97 98 const int indexCount = vertexCount; 99 submesh->indexData->indexStart = 0; 100 submesh->operationType = RenderOperation::OT_TRIANGLE_LIST; 101 102 // we use an index for every vertex 103 submesh->indexData->indexCount = indexCount; 104 submesh->indexData->indexBuffer = 105 HardwareBufferManager::getSingleton(). 106 createIndexBuffer(HardwareIndexBuffer::IT_16BIT, 107 submesh->indexData->indexCount, 108 HardwareBuffer::HBU_STATIC_WRITE_ONLY); 109 110 #if USE_HBL_DISCARD 111 uint16* idata = static_cast<uint16 *>(submesh->indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD)); 112 #else 113 uint16* idata = static_cast<uint16 *>(submesh->indexData->indexBuffer->lock(HardwareBuffer::HBL_NORMAL)); 114 #endif 115 for (int j = 0; j < indexCount; ++ j) 116 { 117 idata[j] = j; 118 } 119 120 submesh->indexData->indexBuffer->unlock(); 121 submesh->setMaterialName("BaseWhite"); 122 123 // indicate the bounding box 124 mesh->_setBounds(aabox); 125 mesh->_setBoundingSphereRadius((aabox.getMaximum() - aabox.getMinimum()).length() / 2.0); 126 } 96 127 97 128 98 SubMesh *pSub = pMesh->createSubMesh();99 pSub->operationType = RenderOperation::OT_TRIANGLE_LIST; //;data->roType;100 pSub->useSharedVertices = true;101 129 102 pSub->indexData->indexCount = data->icnt;103 pSub->indexData->indexBuffer = HardwareBufferManager::getSingleton().104 createIndexBuffer(HardwareIndexBuffer::IT_16BIT,105 pSub->indexData->indexCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY, false);106 107 HardwareIndexBufferSharedPtr ibuf = pSub->indexData->indexBuffer;108 unsigned short* pIndices = static_cast<unsigned short*>(ibuf->lock(HardwareBuffer::HBL_DISCARD));109 110 for (i = 0; i < data->icnt; i++) pIndices[i] = data->indices[i];111 112 ibuf->unlock();113 114 AxisAlignedBox bb(data->boundingBox->getMinimum() - translation, data->boundingBox->getMaximum() - translation);115 //AxisAlignedBox bb(data->boundingBox->getMinimum(), data->boundingBox->getMaximum());116 pMesh->_setBounds(bb);117 Real radius = data->boundingBox->getMinimum().length();118 if (data->boundingBox->getMaximum().length() > radius) radius = data->boundingBox->getMaximum().length();119 pMesh->_setBoundingSphereRadius(radius);120 121 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/src/ObjReader.cpp
r2122 r2123 8 8 #include "PreprocessorFactory.h" 9 9 #include "OgreLogManager.h" 10 #include "ObjManualMeshLoader.h" 10 11 11 12 … … 17 18 18 19 ObjReader::~ObjReader() 19 {} 20 { 21 CLEAR_CONTAINER(mPvsObjects); 22 } 20 23 21 24 … … 31 34 // hack 32 35 preprocessor->mLoadMeshes = false; 33 GtpVisibilityPreprocessor::ObjectContainer pvsObjects;34 36 35 Ogre::LogManager::getSingleton().logMessage("loading obj scene !!");37 Ogre::LogManager::getSingleton().logMessage("loading obj scene"); 36 38 37 39 if (preprocessor->LoadScene(sceneName)) … … 39 41 Ogre::LogManager::getSingleton().logMessage("scene loaded, loading objects"); 40 42 // form objects from the scene triangles 41 if (!preprocessor->LoadObjects(visibilitySolution, pvsObjects, preprocessor->mObjects))43 if (!preprocessor->LoadObjects(visibilitySolution, mPvsObjects, preprocessor->mObjects)) 42 44 { 43 45 Ogre::LogManager::getSingleton().logMessage("objects cannot be loaded"); … … 52 54 53 55 std::stringstream d; 54 d << "successfully loaded " << pvsObjects.size() << " objects from " << preprocessor->mObjects.size() << " preprocessor objects";56 d << "successfully loaded " << mPvsObjects.size() << " objects from " << preprocessor->mObjects.size() << " preprocessor objects"; 55 57 56 58 Ogre::LogManager::getSingleton().logMessage(d.str()); 57 59 58 GtpVisibilityPreprocessor::ObjectContainer::const_iterator oit, oit_end = pvsObjects.end();60 GtpVisibilityPreprocessor::ObjectContainer::const_iterator oit, oit_end = mPvsObjects.end(); 59 61 60 62 int i = 0; 61 for (oit = pvsObjects.begin(); oit != oit_end; ++ oit, ++ i)63 for (oit = mPvsObjects.begin(); oit != oit_end; ++ oit, ++ i) 62 64 { 63 Ogre::LogManager::getSingleton().logMessage("r"); 65 if (i % 5000 == 4999) 66 { 67 d << i << " objects created" << endl; 68 } 69 64 70 const Ogre::String entname = "Object" + Ogre::StringConverter::toString(i); 65 71 66 Ogre::ManualObject *ent = CreateEntity(entname, *oit); 72 #if 0 73 Ogre::ManualObject *ent = CreateManualObject(entname, *oit); 74 #else 75 Ogre::Entity *ent = CreateEntity(entname, *oit); 76 #endif 67 77 68 78 const Ogre::String nodeName = entname + "Node"; … … 70 80 node->attachObject(ent); 71 81 72 if (i > 100)73 82 // problems for too many objects (= vbo)? 83 //if (i > 30000)break; 74 84 } 75 85 … … 89 99 std::string entityName = name + "Entity"; 90 100 91 GtpVisibilityPreprocessor::BvhLeaf *bvhObj =101 GtpVisibilityPreprocessor::BvhLeaf *bvhObj = 92 102 static_cast<GtpVisibilityPreprocessor::BvhLeaf *>(object); 103 93 104 const int vertexCount = (int)bvhObj->mObjects.size() * 3; 94 105 95 106 ManualObject* manual = mSceneManager->createManualObject(entityName); 96 manual->begin("BaseWhite NoLighting", RenderOperation::OT_LINE_STRIP);107 manual->begin("BaseWhite", RenderOperation::OT_TRIANGLE_LIST); 97 108 109 const float red = GtpVisibilityPreprocessor::Random(1.0f); 110 const float green = GtpVisibilityPreprocessor::Random(1.0f); 111 const float blue = GtpVisibilityPreprocessor::Random(1.0f); 112 98 113 // create vertices 99 100 GtpVisibilityPreprocessor::ObjectContainer::const_iterator oit,oit_end = bvhObj->mObjects.end();114 GtpVisibilityPreprocessor::ObjectContainer::const_iterator oit, 115 oit_end = bvhObj->mObjects.end(); 101 116 102 117 for (oit = bvhObj->mObjects.begin(); oit != oit_end; ++ oit) … … 110 125 { 111 126 const GtpVisibilityPreprocessor::Vector3 vtx = tri.mVertices[i]; 127 const GtpVisibilityPreprocessor::Vector3 n = tri.GetNormal(); 128 112 129 manual->position(vtx.x, vtx.y, vtx.z); 113 manual->colour(1.0f, 0.0f, 0.0f); 130 manual->normal(n.x, n.y, n.z); 131 //manual->colour(red, green, blue); 114 132 } 115 133 } 116 134 135 if (0) 117 136 for (int i = 0; i < vertexCount; ++ i) 118 137 { 119 138 manual->index(i); 120 139 } 140 141 manual->end(); 121 142 122 143 return manual; … … 137 158 std::string entityName = name + "Entity"; 138 159 139 MeshPtr mesh = MeshManager::getSingleton().createManual(meshName, "Custom"); 140 SubMesh* submesh = mesh->createSubMesh(); 160 ObjManualMeshLoader *loader = new ObjManualMeshLoader(bvhObj); 141 161 142 const int vertexCount = (int)bvhObj->mObjects.size() * 3; 143 144 // We must create the vertex data, indicating how many vertices there will be 145 submesh->useSharedVertices = false; 146 submesh->vertexData = new VertexData(); 147 submesh->vertexData->vertexStart = 0; 148 submesh->vertexData->vertexCount = vertexCount; 149 150 std::stringstream d; d << "objects: " << bvhObj->mObjects.size() << " vtx: " << submesh->vertexData->vertexCount << endl; 151 Ogre::LogManager::getSingleton().logMessage(d.str()); 152 153 static const unsigned short source = 0; 154 size_t offset = 0; 155 156 VertexDeclaration* declaration = HardwareBufferManager::getSingleton().createVertexDeclaration(); 157 158 offset += declaration->addElement(source, offset, VET_FLOAT3, VES_POSITION).getSize(); 159 //offset += declaration->addElement(source, offset, VET_FLOAT3,VES_NORMAL).getSize(); 160 //offset += declaration->addElement(source, offset, VET_FLOAT2,VES_TEXTURE_COORDINATES).getSize(); 161 162 163 int numVertices = 0; 164 165 HardwareVertexBufferSharedPtr vbuffer = HardwareBufferManager::getSingleton(). 166 createVertexBuffer(declaration->getVertexSize(source), 167 submesh->vertexData->vertexCount, 168 HardwareBuffer::HBU_STATIC_WRITE_ONLY); 169 170 // No we get access to the buffer to fill it. During so we record the bounding box. 171 AxisAlignedBox aabox; 172 173 float* vdata = static_cast<float*>(vbuffer->lock(HardwareBuffer::HBL_DISCARD)); 174 175 GtpVisibilityPreprocessor::ObjectContainer::const_iterator oit, oit_end = bvhObj->mObjects.end(); 176 177 for (oit = bvhObj->mObjects.begin(); oit != oit_end; ++ oit) 178 { 179 GtpVisibilityPreprocessor::TriangleIntersectable *tObj = 180 static_cast<GtpVisibilityPreprocessor::TriangleIntersectable *>(*oit); 181 182 GtpVisibilityPreprocessor::Triangle3 tri = tObj->GetItem(); 183 184 for (int i = 0; i < 3; ++ i) 185 { 186 Vector3 vtx = Vector3(tri.mVertices[i]); 187 188 *vdata ++ = vtx.x; 189 *vdata ++ = vtx.y; 190 *vdata ++ = vtx.z; 191 192 //std::stringstream d; d << vtx; 193 //Ogre::LogManager::getSingleton().logMessage(d.str()); 194 aabox.merge(vtx); 195 } 196 } 197 //Ogre::LogManager::getSingleton().logMessage("***"); 198 vbuffer->unlock(); 199 200 /*Ogre::RenderOperation rop; 201 submesh->_getRenderOperation(rop); 202 rop.useIndexes = false; 203 */ 204 ////// 205 //-- Creates the index data 206 207 submesh->vertexData->vertexBufferBinding->setBinding(source, vbuffer); 208 209 submesh->indexData->indexStart = 0; 210 // we use an index for every vertex 211 submesh->indexData->indexCount = vertexCount; 212 submesh->indexData->indexBuffer = 213 HardwareBufferManager::getSingleton(). 214 createIndexBuffer(HardwareIndexBuffer::IT_16BIT, 215 submesh->indexData->indexCount, 216 HardwareBuffer::HBU_STATIC_WRITE_ONLY); 217 submesh->operationType = RenderOperation::OT_LINE_STRIP; 218 //uint16* idata = static_cast<uint16*>(submesh->indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD)); 219 unsigned short* idata = static_cast<unsigned short*>(submesh->indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD)); 220 221 for (int j = 0; j < vertexCount; ++ j) 222 { 223 *idata = j; 224 ++ idata; 225 } 226 227 submesh->indexData->indexBuffer->unlock(); 228 229 submesh->setMaterialName("BaseWhiteNoLighting"); 230 231 // We must indicate the bounding box 232 mesh->_setBounds(aabox); 233 mesh->_setBoundingSphereRadius((aabox.getMaximum() - aabox.getMinimum()).length() / 2.0); 234 mesh->load(); 235 mesh->touch(); 162 Mesh* pMesh = MeshManager::getSingleton().createManual(meshName, "ObjGroup", loader).getPointer(); 163 pMesh->load(); 236 164 237 165 // Create an entity with the mesh 238 166 entity = mSceneManager->createEntity(entityName, meshName); 239 167 240 //entity->setRenderQueueGroup(Ogre::RENDER_QUEUE_MAIN); 168 return entity; 169 } 241 170 242 return entity;243 #endif244 } -
GTP/trunk/Lib/Vis/OnlineCullingCHC/ObjReader/src/ObjReader.vcproj
r2122 r2123 20 20 Name="VCCLCompilerTool" 21 21 Optimization="0" 22 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\Samples\Common\include";..\include "22 AdditionalIncludeDirectories=""$(OGRE_PATH)\Dependencies\include\CEGUI";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\include";"$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\Samples\Common\include";..\include;..\..\..\Preprocessing\src" 23 23 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;OBJREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE" 24 24 MinimalRebuild="TRUE" 25 25 BasicRuntimeChecks="3" 26 RuntimeLibrary=" 1"27 UsePrecompiledHeader="0" 28 WarningLevel="3" 29 Detect64BitPortabilityProblems="TRUE" 30 DebugInformationFormat="3"/> 31 <Tool 32 Name="VCCustomBuildTool"/> 33 <Tool 34 Name="VCLinkerTool" 35 AdditionalDependencies="OgreMain_d.lib CEGUIBase_d.lib OgreGUIRenderer_d.lib "36 OutputFile="$(OutDir)/ObjReader.dll" 37 LinkIncremental="1" 38 AdditionalLibraryDirectories=""$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"..\..\GtpVisibility\lib\$(ConfigurationName)";"..\..\lib\$(ConfigurationName)";"..\lib\$(ConfigurationName)";"$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)" "26 RuntimeLibrary="3" 27 UsePrecompiledHeader="0" 28 WarningLevel="3" 29 Detect64BitPortabilityProblems="TRUE" 30 DebugInformationFormat="3"/> 31 <Tool 32 Name="VCCustomBuildTool"/> 33 <Tool 34 Name="VCLinkerTool" 35 AdditionalDependencies="OgreMain_d.lib CEGUIBase_d.lib OgreGUIRenderer_d.lib Preprocessor.lib xerces-c_2.lib zdll.lib zziplibd.lib" 36 OutputFile="$(OutDir)/ObjReader.dll" 37 LinkIncremental="1" 38 AdditionalLibraryDirectories=""$(OGRE_PATH)\OgreMain\lib\$(ConfigurationName)";"$(OGRE_PATH)\Samples\Common\CEGUIRenderer\lib";"..\..\GtpVisibility\lib\$(ConfigurationName)";"..\..\lib\$(ConfigurationName)";"..\lib\$(ConfigurationName)";"$(OGRE_PATH)\Dependencies\lib\$(ConfigurationName)";"..\..\..\Preprocessing\lib\$(ConfigurationName)";..\..\..\..\..\..\..\NonGTP\Xerces\xercesc\lib" 39 39 GenerateDebugInformation="TRUE" 40 40 ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb" … … 73 73 Name="VCCLCompilerTool" 74 74 AdditionalIncludeDirectories=""$(OGRE_PATH)\OgreMain\include";"$(OGRE_PATH)\Dependencies\include";"$(OGRE_PATH)\Samples\Common\include";..\include;..\..\..\Preprocessing\src" 75 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;OBJREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE 1;USE_VERBOSE_PVS"75 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;OBJREADER_EXPORTS;GTP_VISIBILITY_MODIFIED_OGRE;GAMETOOLS_ILLUMINATION_MODULE" 76 76 RuntimeLibrary="2" 77 77 UsePrecompiledHeader="0" … … 339 339 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> 340 340 <File 341 RelativePath=".\ObjManualMeshLoader.cpp"> 342 </File> 343 <File 341 344 RelativePath="..\src\ObjReader.cpp"> 342 345 </File> 343 <Filter 344 Name="Header Files" 345 Filter="h;hpp;hxx;hm;inl;inc;xsd" 346 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> 347 <File 348 RelativePath="..\include\ObjReader.h"> 349 </File> 350 </Filter> 346 </Filter> 347 <Filter 348 Name="Header Files" 349 Filter="h;hpp;hxx;hm;inl;inc;xsd" 350 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> 351 <File 352 RelativePath="..\include\ObjManualMeshLoader.h"> 353 </File> 354 <File 355 RelativePath="..\include\ObjReader.h"> 356 </File> 351 357 </Filter> 352 358 </Files> -
GTP/trunk/Lib/Vis/Preprocessing/src/HashPvs.h
r2117 r2123 20 20 { 21 21 bucket_size = 4, 22 min_buckets = 8 022 min_buckets = 8 23 23 }; 24 24 -
GTP/trunk/Lib/Vis/Preprocessing/src/Mutation.cpp
r2105 r2123 51 51 cerr<<"Muattion update..."<<endl; 52 52 cerr<<"rays = "<<mRays.size()<<endl; 53 if ( mRays.size()) {53 if ((int)mRays.size()) { 54 54 cerr<<"Oversampling factors = "<< 55 55 GetEntry(0).mMutations<<" "<< … … 59 59 GetEntry(4).mMutations<<" "<< 60 60 GetEntry(5).mMutations<<" ... "<< 61 GetEntry( mRays.size()-6).mMutations<<" "<<62 GetEntry( mRays.size()-5).mMutations<<" "<<63 GetEntry( mRays.size()-4).mMutations<<" "<<64 GetEntry( mRays.size()-3).mMutations<<" "<<65 GetEntry( mRays.size()-2).mMutations<<" "<<66 GetEntry( mRays.size()-1).mMutations<<endl;61 GetEntry((int)mRays.size()-6).mMutations<<" "<< 62 GetEntry((int)mRays.size()-5).mMutations<<" "<< 63 GetEntry((int)mRays.size()-4).mMutations<<" "<< 64 GetEntry((int)mRays.size()-3).mMutations<<" "<< 65 GetEntry((int)mRays.size()-2).mMutations<<" "<< 66 GetEntry((int)mRays.size()-1).mMutations<<endl; 67 67 } 68 68 int contributingRays = 0; -
GTP/trunk/Lib/Vis/Preprocessing/src/ObjParser.cpp
r2119 r2123 203 203 if (SqrMagnitude(cross_a_b) <= 0.000001 * FLT_EPSILON * FLT_EPSILON) 204 204 { 205 cout << "x";206 205 // v0, v1 & v2 lies on a line (area == 0) 207 206 return false; -
GTP/trunk/Lib/Vis/Preprocessing/src/ObjectPvs.h
r2120 r2123 23 23 but the individual contributions of the entries are summed up. 24 24 */ 25 float EvalPvsCost() const { 26 //temp matt 27 return 1.0f; } 25 float EvalPvsCost() const; 28 26 29 27 friend ostream &operator<<(ostream &s, const ObjectPvs &p) -
GTP/trunk/Lib/Vis/Preprocessing/src/ObjectsParser.cpp
r2119 r2123 85 85 , mIsObjectSpaceHierarchy(false) 86 86 { 87 // sort objects so we can search in them88 //if (!is_sorted(mPvsObjects.begin(), mPvsObjects.end(), ilt))89 sort(mPvsObjects.begin(), mPvsObjects.end(), ilt);90 Debug << "here333";91 //if (!is_sorted(mPreprocessorObjects.begin(), mPreprocessorObjects.end(), ilt))92 //sort(mPreprocessorObjects.begin(), mPreprocessorObjects.end(), ilt);93 87 } 94 88 … … 257 251 { 258 252 const int objId = *it; 253 254 #if 0 255 // assume there is is no id missing 256 objects.push_back(mPreprocessorObjects[objId]); 257 #else 259 258 dummyInst.SetId(objId); 260 259 … … 268 267 { 269 268 objects.push_back(*oit); 270 Debug << "x"; 271 } 272 else 273 { 274 Debug << "y"; 275 //cerr << "StartBvhLeafObjects error: object with id " << objId << " does not exist" << endl; 276 } 269 } 270 #endif 277 271 } 278 272 } -
GTP/trunk/Lib/Vis/Preprocessing/src/Preprocessor.vcproj
r2120 r2123 72 72 OptimizeForWindowsApplication="TRUE" 73 73 AdditionalIncludeDirectories="..\include;..\src;..\..\..\..\..\..\NonGTP\Devil\include;..\..\..\..\..\..\NonGTP\Zlib\include;..\..\..\..\..\..\NonGTP\Xerces;..\..\..\..\..\..\NonGTP\Boost;Timer" 74 PreprocessorDefinitions="WIN32;NDEBUG;_LIB; USE_VERBOSE_PVS"74 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;" 75 75 ExceptionHandling="TRUE" 76 76 RuntimeLibrary="2" … … 383 383 </File> 384 384 <File 385 RelativePath=".\BitVectorPvs.cpp"> 386 </File> 387 <File 385 388 RelativePath=".\BitVectorPvs.h"> 386 389 </File> … … 582 585 <File 583 586 RelativePath="..\src\MutualVisibility.h"> 587 </File> 588 <File 589 RelativePath=".\ObjectPvs.cpp"> 584 590 </File> 585 591 <File -
GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.cpp
r2122 r2123 1050 1050 preprocessorObjects, 1051 1051 bconverter); 1052 1053 //Debug << " view cells parsed in " 1054 // << TimeDiff(startTime, GetTime()) * 1e-3f << " secs" << endl; 1055 1052 1056 1053 1057 if (!success) … … 3687 3691 vector<ObjectPvs>::iterator oit = pvsList.begin(); 3688 3692 3693 PvsData pvsData; 3694 3689 3695 for (vit = interior->mChildren.begin(); vit != vit_end; ++ vit, ++ oit) 3690 3696 { … … 3694 3700 while (pit.HasMoreEntries()) 3695 3701 { 3696 ObjectPvsEntry entry = pit.Next(); 3697 3698 Intersectable *intersect = entry.mObject; 3702 Intersectable *intersect = pit.Next(pvsData); 3699 3703 3700 3704 if (!intersect->Mailed()) … … 3702 3706 intersect->Mail(); 3703 3707 3704 pvs.AddSampleDirty(intersect, entry.mData.mSumPdf);3708 pvs.AddSampleDirty(intersect, pvsData.mSumPdf); 3705 3709 } 3706 3710 } … … 4179 4183 while (pit.HasMoreEntries()) 4180 4184 { 4181 ObjectPvsEntry entry= pit.Next();4185 Intersectable *intersect = pit.Next(); 4182 4186 4183 4187 // output PVS of view cell 4184 Intersectable *intersect = entry.mObject;4185 4186 4188 if (!intersect->Mailed()) 4187 4189 { … … 4684 4686 while (pit.HasMoreEntries()) 4685 4687 { 4686 ObjectPvsEntry entry = pit.Next();4687 4688 4688 //-- output PVS of view cell 4689 Intersectable *intersect = entry.mObject; 4689 Intersectable *intersect = pit.Next(); 4690 4690 4691 if (!intersect->Mailed()) 4691 4692 { … … 5501 5502 while (pit.HasMoreEntries()) 5502 5503 { 5503 ObjectPvsEntry entry = pit.Next(); 5504 Intersectable *intersect = entry.mObject; 5504 Intersectable *intersect = pit.Next(); 5505 5505 5506 5506 if (!intersect->Mailed()) … … 6283 6283 while (pit.HasMoreEntries()) 6284 6284 { 6285 ObjectPvsEntry entry= pit.Next();6285 Intersectable *obj = pit.Next(); 6286 6286 6287 BvhNode *node = static_cast<BvhNode *>( entry.mObject);6287 BvhNode *node = static_cast<BvhNode *>(obj); 6288 6288 6289 6289 // hack!! … … 6496 6496 while (pit.HasMoreEntries()) 6497 6497 { 6498 ObjectPvsEntry entry= pit.Next();6498 Intersectable *intersect = pit.Next(); 6499 6499 6500 Intersectable *intersect = entry.mObject;6501 6502 6500 if (!intersect->Mailed()) 6503 6501 { -
GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.h
r2117 r2123 7 7 #include "Containers.h" 8 8 #include "ViewCell.h" 9 //#include "ViewCellBsp.h" 9 10 10 11 11 namespace GtpVisibilityPreprocessor { -
GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsParser.cpp
r2119 r2123 68 68 // hack for loading bvh nodes 69 69 #define PVS_HACK 0 70 #define USE_HASH_COMPARE 1 71 70 72 71 73 inline static bool ilt(Intersectable *obj1, Intersectable *obj2) … … 103 105 , nObjects(0) 104 106 { 105 // q: can we assume that the objects are sorted?106 107 // sort objects so we can search in them108 //if (!is_sorted(mPvsObjects.begin(), mPvsObjects.end(), ilt))109 sort(mPvsObjects.begin(), mPvsObjects.end(), ilt);110 111 //if (!is_sorted(mPreprocessorObjects.begin(), mPreprocessorObjects.end(), ilt))112 // sort(mPreprocessorObjects.begin(), mPreprocessorObjects.end(), ilt);113 107 } 114 108 … … 119 113 120 114 115 void ViewCellsParseHandlers::CreateHashVector() 116 { 117 ObjectContainer::const_iterator oit, oit_end = mPvsObjects.end(); 118 119 for (oit = mPvsObjects.begin(); oit != oit_end; ++ oit) 120 { 121 mHashPvs[(*oit)->GetId()] = (*oit); 122 } 123 //Debug<<"\nhsize: " << mHashPvs.size() << endl; 124 } 125 /* 126 void ViewCellsParseHandlers::CreateHashVector2() 127 { 128 ObjectContainer::const_iterator oit, oit_end = mPvsObjects.end(); 129 130 for (oit = mPvsObjects.begin(); oit != oit_end; ++ oit) 131 { 132 mHashPvs[(*oit)->GetId()] = (*oit); 133 } 134 Debug<<"\nhsize: " << mHashPvs.size() << endl; 135 } 136 */ 121 137 // --------------------------------------------------------------------------- 122 138 // StdInParseHandlers: Implementation of the SAX DocumentHandler interface … … 133 149 EndBoundingBoxes(); 134 150 } 135 136 if (element == "ViewCells") 151 else if (element == "ViewCells") 137 152 { 138 153 EndViewCells(); 139 }140 141 if (element == "ObjectSpaceHierarchy")154 Debug << "view cell hierarchy parsed" << endl; 155 } 156 else if (element == "ObjectSpaceHierarchy") 142 157 { 143 158 EndObjectSpaceHierarchy(); 144 } 145 146 // finished, create view cells manager 147 if (element == "VisibilitySolution") 159 Debug << "object space hierarchy parsed" << endl; 160 mObjectTimer.Exit(); 161 } 162 // finished paring, create view cells manager 163 else if (element == "VisibilitySolution") 148 164 { 149 165 CreateViewCellsManager(); 150 } 151 152 if (element == "Interior") 166 167 Debug << "pvs time: " << mPvsTimer.TotalTime() << endl; 168 Debug << "object time: " << mObjectTimer.TotalTime() << endl; 169 Debug << "box time: " << mBoxTimer.TotalTime() << endl; 170 171 } 172 else if (element == "Interior") 153 173 { 154 174 switch (mCurrentState) … … 289 309 const long startTime = GetTime(); 290 310 311 mBoxTimer.Entry(); 312 291 313 if (mBoundingBoxConverter) 292 314 { … … 296 318 } 297 319 320 if (USE_HASH_COMPARE) 321 { 322 CreateHashVector(); 323 } 324 else 325 { 326 sort(mPvsObjects.begin(), mPvsObjects.end(), ilt); 327 328 /*ObjectContainer::const_iterator oit, oit_end = mPvsObjects.end(); 329 330 int id = 0; 331 for (oit = mPvsObjects.begin(); oit != oit_end; ++ oit, ++ id) 332 { 333 if ((*oit)->GetId() != id) 334 Debug << "error" << endl; 335 }*/ 336 } 337 298 338 Debug << "\nconverted bounding boxes to objects in " 299 << TimeDiff(startTime, GetTime()) * 1e-3 << " secs" << endl; 339 << TimeDiff(startTime, GetTime()) * 1e-6 << " secs" << endl; 340 mBoxTimer.Exit(); 300 341 } 301 342 … … 412 453 if (element == "Interior") 413 454 { 414 //cout << "[";415 455 StartViewCell(attributes, false); 456 return; 416 457 } 417 458 418 459 if (element == "Leaf") 419 460 { 420 //cout << "l";421 461 StartViewCell(attributes, true); 422 } 462 return; 463 } 464 465 Debug << "StartViewCellHierarchyElement: should not come here: " << element << endl; 423 466 } 424 467 … … 440 483 mViewCellsTree = new ViewCellsTree(); 441 484 } 442 443 485 // decides about the view cell hierarchy 444 if (element == "ViewSpaceHierarchy")486 else if (element == "ViewSpaceHierarchy") 445 487 { 446 488 Debug << "\nparsing view space hierarchy" << endl; … … 450 492 StartViewSpaceHierarchy(attributes); 451 493 } 452 453 494 // decides about the view cell hierarchy 454 if (element == "ObjectSpaceHierarchy")495 else if (element == "ObjectSpaceHierarchy") 455 496 { 456 497 cout << "\nparsing object space hierarchy" << endl; … … 458 499 459 500 mCurrentState = PARSE_OBJECTSPACE_HIERARCHY; 501 mObjectTimer.Entry(); 460 502 StartObjectSpaceHierarchy(attributes); 461 503 } 462 463 504 // decides the used view cell hierarchy 464 if (element == "BoundingBox")505 else if (element == "BoundingBox") 465 506 { 466 507 StartBoundingBox(attributes); 467 508 } 468 469 // parse view space hierarchy 470 switch (mCurrentState) 471 { 472 case PARSE_VIEWSPACE_HIERARCHY: 473 if ((++ nViewCells % 1000) == 0) 474 cout << "\r" << nViewCells << " view cells parsed\r"; 509 else 510 { 511 // parse view space hierarchy 512 switch (mCurrentState) 513 { 514 case PARSE_VIEWSPACE_HIERARCHY: 515 if ((++ nViewCells % 1000) == 0) 516 { 517 cout << "\r" << nViewCells << " view cells parsed\r"; 518 Debug << nViewCells << " view cells parsed" << endl; 519 } 520 StartViewSpaceHierarchyElement(element, attributes); 521 break; 522 case PARSE_OBJECTSPACE_HIERARCHY: 523 if ((++ nObjects % 1000) == 0) 524 cout <<"\r" << nObjects << " objects parsed\r"; 475 525 476 StartViewSpaceHierarchyElement(element, attributes); 477 break; 478 case PARSE_OBJECTSPACE_HIERARCHY: 479 if ((++ nObjects % 1000) == 0) 480 cout <<"\r" << nObjects << " objects parsed\r"; 481 482 StartObjectSpaceHierarchyElement(element, attributes); 483 break; 484 case PARSE_VIEWCELLS: 485 StartViewCellHierarchyElement(element, attributes); 486 break; 487 default: 488 break; 526 StartObjectSpaceHierarchyElement(element, attributes); 527 break; 528 case PARSE_VIEWCELLS: 529 StartViewCellHierarchyElement(element, attributes); 530 break; 531 default: 532 break; 533 } 489 534 } 490 535 … … 509 554 } 510 555 511 #if 1 556 Intersectable::NewMail(); 557 558 mPvsTimer.Entry(); 559 512 560 // TODO: 513 561 // 1) find objects and add them to pvs … … 522 570 { 523 571 const int objId = *it; 524 dummyInst.SetId(objId); 525 526 // equal indeces possible! 527 result = equal_range(mPvsObjects.begin(), 528 mPvsObjects.end(), 529 (Intersectable *)&dummyInst, 530 ilt); 531 532 ObjectContainer::const_iterator eit = result.first; 533 534 for (; eit != result.second; ++ eit) 535 { 536 pvs.AddSample(*eit, 1.0f); 537 } 538 } 539 572 573 #if USE_HASH_COMPARE 574 pvs_hash::iterator oit = mHashPvs.find(objId); 575 576 if ((oit != mHashPvs.end()) && ((*oit).second->GetId() == objId)) 577 { 578 pvs.AddSample((*oit).second, 1.0f); 579 } 540 580 #else 541 542 // TODO: 543 // 1) find objects and add them to pvs 544 // 2) get view cell with specified id 545 MeshInstance dummyInst(NULL); 546 547 vector<int>::const_iterator it, it_end = objIndices.end(); 548 for (it = objIndices.begin(); it != it_end; ++ it) 549 { 550 const int objId = *it; 581 #if 0 551 582 dummyInst.SetId(objId); 552 583 … … 558 589 if ((oit != mPvsObjects.end()) && ((*oit)->GetId() == objId)) 559 590 { 560 // $$JB we should store a float a per object which corresponds561 // to sumof pdfs, i.e. its relative visibility562 // temporarily set to 1.0f563 591 pvs.AddSample(*oit, 1.0f); 564 592 } 565 else 566 { 567 Debug << "x"; 568 //Debug << "StartViewCellPvs error: object with id " << objId << " does not exist" << endl; 569 } 570 } 593 #else 594 pvs.AddSample(mPvsObjects[objId], 1.0f); 571 595 #endif 596 #endif 597 } 598 599 mPvsTimer.Exit(); 572 600 } 573 601 … … 814 842 { 815 843 ViewCell *viewCell = NULL; 816 817 844 const int len = attributes.getLength(); 818 845 float mergeCost; … … 841 868 viewCell->SetId(id); 842 869 843 if (mCurrentViewCell) // replace front or (if not NULL) back child844 { 870 if (mCurrentViewCell) 871 { // replace front or (if not NULL) back child 845 872 ViewCellInterior *interior = 846 873 static_cast<ViewCellInterior *>(mCurrentViewCell); … … 862 889 const char *ptr = attrValue.LocalForm(); 863 890 864 // note: id must come before pvs!891 // hack: assume that view cell id comes before pvs 865 892 // otherwise view cell is undefined 866 893 867 // hack: assume that view cell comes before pvs868 894 StartViewCellPvs(viewCell->GetPvs(), ptr); 869 895 //StartViewCellPvs(pvs, ptr); … … 915 941 for (vit = mViewCells.begin(); vit != vit_end; ++ vit, ++ i) 916 942 { 917 //if ((i % 1000) == 0)918 // Debug << "\n exchanged " << i << " boxes" << endl;919 943 ViewCell *vc = (*vit); 920 944 … … 1302 1326 { 1303 1327 objects.push_back(*oit); 1304 Debug << "x";1305 1328 } 1306 1329 else 1307 1330 { 1308 Debug << "y";1309 1331 //cerr << "StartBvhLeafObjects error: object with id " << objId << " does not exist" << endl; 1310 1332 } … … 1483 1505 } 1484 1506 1485 cout<<"parsed - will delete the parser"<<endl<<flush;1486 1507 // 1487 1508 // Delete the parser itself. Must be done prior to calling Terminate, below. -
GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsParser.h
r2114 r2123 11 11 class BoundingBoxConverter; 12 12 class Environment; 13 13 14 14 15 class ViewCellsParser: public Parser -
GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsParserXerces.h
r2116 r2123 8 8 #include "Mesh.h" 9 9 #include "BoundingBoxConverter.h" 10 10 #include "PerfTimer.h" 11 #include <hash_map> 11 12 12 13 namespace GtpVisibilityPreprocessor { … … 30 31 class BspNode; 31 32 33 /* 34 struct pvs_hash_compare 35 { 36 enum 37 { 38 bucket_size = 4, 39 min_buckets = 8 40 }; 41 42 size_t operator()(Intersectable *a) const 43 { 44 size_t h = (size_t)(a->GetId());// % 2000; 45 return h; 46 } 47 48 bool operator()(int a, int b) const 49 { 50 return a < b; 51 } 52 };*/ 53 54 55 typedef stdext::hash_map<int, Intersectable *> pvs_hash; 56 32 57 33 58 class ViewCellsParseHandlers: public HandlerBase … … 132 157 int nObjects; 133 158 134 159 PerfTimer mBoxTimer; 160 PerfTimer mPvsTimer; 161 PerfTimer mObjectTimer; 162 163 pvs_hash mHashPvs; 164 135 165 //////////////////////////////// 136 166 137 167 138 168 // Handlers for X3D 139 169 170 void CreateHashVector(); 171 140 172 void StartBspLeaf(AttributeList& attributes); 141 173 void StartBspInterior(AttributeList& attributes); -
GTP/trunk/Lib/Vis/Preprocessing/src/VspTree.cpp
r2116 r2123 3387 3387 while (oit.HasMoreEntries()) 3388 3388 { 3389 const ObjectPvsEntry &entry = oit.Next(); 3390 BvhNode *obj = static_cast<BvhNode *>(entry.mObject); 3389 BvhNode *obj = static_cast<BvhNode *>(oit.Next()); 3391 3390 3392 3391 if (!obj->IsRoot()) … … 3411 3410 } 3412 3411 } 3413 3412 3413 PvsData pvsData; 3414 3414 oit = leaf->GetViewCell()->GetPvs().GetIterator(); 3415 3415 3416 3416 while (oit.HasMoreEntries()) 3417 3417 { 3418 const ObjectPvsEntry &entry = oit.Next(); 3419 BvhNode *obj = static_cast<BvhNode *>(entry.mObject); 3418 BvhNode *obj = static_cast<BvhNode *>(oit.Next(pvsData)); 3420 3419 3421 3420 if (!obj->IsRoot()) … … 3426 3425 if (!parent->Mailed(1)) 3427 3426 { 3428 newPvs.AddSampleDirty(obj, entry.mData.mSumPdf);3427 newPvs.AddSampleDirty(obj, pvsData.mSumPdf); 3429 3428 } 3430 3429 } -
GTP/trunk/Lib/Vis/Preprocessing/src/common.cpp
r2001 r2123 153 153 // return time diff. in ms 154 154 Real 155 TimeDiff(long time1, long time2) // in ms156 { 157 //const Real clk=1.0e-3f; // ticks per second155 TimeDiff(long time1, long time2) // in ms 156 { 157 const Real clk=1.0e-3f; // ticks per second 158 158 // $$ tmp store time in ms 159 const Real clk=1.0f; // ticks per second159 //const Real clk=1.0f; // ticks per second 160 160 long t=time2-time1; 161 161 -
GTP/trunk/Lib/Vis/Preprocessing/src/common.h
r1757 r2123 330 330 long GetTime(); 331 331 long GetRealTime(); 332 Real TimeDiff(long t1, long t2);332 Real TimeDiff(long t1, long t2); 333 333 char *TimeString(); 334 334
Note: See TracChangeset
for help on using the changeset viewer.