Changeset 884


Ignore:
Timestamp:
05/03/06 11:35:39 (18 years ago)
Author:
bittner
Message:

Spatial visibility filter

Location:
GTP/trunk/Lib/Vis/Preprocessing/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/GlRenderer.cpp

    r878 r884  
    4444#endif 
    4545 
    46 bool useFilter = false; 
    4746 
    4847GlRenderer::GlRenderer(SceneGraph *sceneGraph, 
     
    848847  PrVs prvs; 
    849848   
    850   if (!useFilter) { 
    851         viewcell = mViewCellsManager->GetViewCell(mViewPoint); 
     849  if (!mUseFilter) { 
     850        viewcell = mViewCellsManager->GetViewCell(mViewPoint, true); 
    852851  } else { 
    853852        //  mViewCellsManager->SetMaxFilterSize(1); 
     
    857856   
    858857  if (viewcell) { 
    859         ObjectPvs &pvs = viewcell->GetPvs(); 
    860  
     858        // copy the pvs so that it can be filtered... 
     859        ObjectPvs pvs = viewcell->GetPvs(); 
     860 
     861        if (mUseSpatialFilter) { 
     862          mViewCellsManager->ApplySpatialFilter(mKdTree, 
     863                                                                                        mSpatialFilterSize* 
     864                                                                                        Magnitude(mViewCellsManager->GetViewSpaceBox().Size()), 
     865                                                                                        //                                                                                      mViewCellsManager->GetFilterWidth()/2, 
     866                                                                                        pvs); 
     867        } 
     868         
     869         
    861870        // read back the texture 
    862871        std::map<Intersectable *, 
     
    881890        } 
    882891         
    883         if (useFilter) 
     892        if (mUseFilter) 
    884893          mViewCellsManager->DeleteLocalMergeTree(viewcell); 
    885894  } else { 
     
    924933  ViewCell *viewcell; 
    925934 
    926   PrVs prvs; 
    927   //  mViewCellsManager->SetMaxFilterSize(1); 
    928  
    929  
    930   if (!useFilter) 
    931         viewcell = mViewCellsManager->GetViewCell(mViewPoint); 
    932   else { 
    933         mViewCellsManager->GetPrVS(mViewPoint, prvs); 
    934         viewcell = prvs.mViewCell; 
    935   } 
    936    
    937935  QImage im1, im2; 
    938936  QImage diff; 
     
    942940        im1 = grabFrameBuffer(true); 
    943941         
    944         SetupCamera(); 
    945         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    946          
    947         std::map<Intersectable *, 
    948           PvsData<Intersectable *>, 
    949           LtSample<Intersectable *> >::const_iterator it = viewcell->GetPvs().mEntries.begin(); 
    950  
    951         mPvsSize = viewcell->GetPvs().mEntries.size(); 
    952  
    953         for (; it != viewcell->GetPvs().mEntries.end(); ++ it) { 
    954           Intersectable *object = (*it).first; 
    955           RenderIntersectable(object); 
    956         } 
     942        RenderPvs(); 
    957943 
    958944        // read back the texture 
     
    978964  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    979965  mUseFalseColors = false; 
    980          
     966   
    981967  oi = mObjects.begin(); 
    982968  for (; oi != mObjects.end(); oi++) 
     
    10331019 
    10341020  glDisable(GL_CLIP_PLANE0); 
    1035  
    1036   if (useFilter && viewcell) 
    1037         mViewCellsManager->DeleteLocalMergeTree(viewcell); 
    10381021   
    10391022  mRenderError = pErrorPixels; 
     
    13171300 
    13181301 
     1302  label = new QLabel("Spatial Filter size"); 
     1303  vbox->layout()->addWidget(label); 
     1304   
     1305  slider = new QSlider(Qt::Horizontal, vbox); 
     1306  vbox->layout()->addWidget(slider); 
     1307  slider->show(); 
     1308  slider->setRange(1, 100); 
     1309  slider->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); 
     1310  slider->setValue(10); 
     1311   
     1312  connect(slider, SIGNAL(valueChanged(int)), SIGNAL(SetSpatialFilterSize(int))); 
     1313 
     1314 
    13191315 
    13201316  QWidget *hbox = new QWidget(vbox); 
     
    13631359  connect(cb, SIGNAL(toggled(bool)), SIGNAL(SetRenderErrors(bool))); 
    13641360 
     1361  cb = new QCheckBox("Use filter", vbox); 
     1362  vbox->layout()->addWidget(cb); 
     1363  cb->setChecked(true); 
     1364  connect(cb, SIGNAL(toggled(bool)), SIGNAL(SetUseFilter(bool))); 
     1365 
     1366  cb = new QCheckBox("Use spatial filter", vbox); 
     1367  vbox->layout()->addWidget(cb); 
     1368  cb->setChecked(true); 
     1369  connect(cb, SIGNAL(toggled(bool)), SIGNAL(SetUseSpatialFilter(bool))); 
     1370 
    13651371  cb = new QCheckBox("Render filter", vbox); 
    13661372  vbox->layout()->addWidget(cb); 
    13671373  cb->setChecked(true); 
    13681374  connect(cb, SIGNAL(toggled(bool)), SIGNAL(SetRenderFilter(bool))); 
     1375 
    13691376 
    13701377  cb = new QCheckBox("Cut view cells", vbox); 
     
    14571464  mRenderErrors = false; 
    14581465  mRenderFilter = true; 
     1466  mUseFilter = true; 
     1467  mUseSpatialFilter = true; 
    14591468  mShowRenderCost = false; 
    14601469  mShowPvsSizes = false; 
    1461  
     1470  mSpatialFilterSize = 0.01; 
    14621471  mPvsSize = 0; 
    14631472  mRenderError = 0.0f; 
     
    14691478 
    14701479  connect(mControlWidget, SIGNAL(SetVisibilityFilterSize(int)), this, SLOT(SetVisibilityFilterSize(int))); 
     1480  connect(mControlWidget, SIGNAL(SetSpatialFilterSize(int)), this, SLOT(SetSpatialFilterSize(int))); 
    14711481 
    14721482  connect(mControlWidget, SIGNAL(SetShowViewCells(bool)), this, SLOT(SetShowViewCells(bool))); 
     
    14781488  connect(mControlWidget, SIGNAL(SetRenderErrors(bool)), this, SLOT(SetRenderErrors(bool))); 
    14791489  connect(mControlWidget, SIGNAL(SetRenderFilter(bool)), this, SLOT(SetRenderFilter(bool))); 
     1490  connect(mControlWidget, SIGNAL(SetUseFilter(bool)), this, SLOT(SetUseFilter(bool))); 
     1491  connect(mControlWidget, SIGNAL(SetUseSpatialFilter(bool)), 
     1492                  this, SLOT(SetUseSpatialFilter(bool))); 
    14801493 
    14811494   
     
    14891502        //      mViewCellsManager->SetMaxFilterSize(number); 
    14901503    mViewCellsManager->CollectViewCells(number); 
     1504 
    14911505  updateGL(); 
    14921506} 
     
    14971511  if (mViewCellsManager)  
    14981512        mViewCellsManager->SetMaxFilterSize(number); 
     1513  updateGL(); 
     1514} 
     1515 
     1516void 
     1517GlRendererWidget::SetSpatialFilterSize(int number) 
     1518{ 
     1519  mSpatialFilterSize = 1e-3*number; 
    14991520  updateGL(); 
    15001521} 
  • GTP/trunk/Lib/Vis/Preprocessing/src/GlRenderer.h

    r865 r884  
    259259  SetTopDistance(int); 
    260260  SetVisibilityFilterSize(int); 
     261  SetSpatialFilterSize(int); 
    261262 
    262263  SetRenderFilter(bool); 
     264  SetUseFilter(bool); 
     265  SetUseSpatialFilter(bool); 
    263266  SetRenderErrors(bool); 
    264267  SetShowViewCells(bool); 
     
    286289  bool mRenderErrors; 
    287290  bool mRenderFilter; 
     291  bool mUseFilter; 
     292  bool mUseSpatialFilter; 
    288293  bool mShowRenderCost; 
     294   
    289295  bool mShowPvsSizes; 
    290  
     296  float mSpatialFilterSize; 
     297   
    291298  Plane3 mSceneCutPlane; 
    292299  float mTopDistance; 
     
    351358 } 
    352359 
     360  void SetUseFilter(bool b) { 
     361   mUseFilter = b; 
     362   updateGL(); 
     363 } 
     364 
     365  void SetUseSpatialFilter(bool b) { 
     366        mUseSpatialFilter = b; 
     367        updateGL(); 
     368  } 
     369 
    353370   
    354371  void 
     
    357374  void 
    358375  SetVisibilityFilterSize(int number); 
     376 
     377  void 
     378  SetSpatialFilterSize(int number); 
    359379   
    360380  void 
  • GTP/trunk/Lib/Vis/Preprocessing/src/RssPreprocessor.cpp

    r871 r884  
    686686        rssSamples += (int)vssRays.size(); 
    687687 
    688         cout<<"Generated "<<castRays<<" rays, progress "<<totalSamples/((float) mRssSamples + 
    689                                                                                                                                         mInitialSamples)<<"%\n"; 
     688        cout<<"Generated "<<castRays<<" rays, progress "<<100.0f*totalSamples/((float) mRssSamples + 
     689                                                                                                                                                   mInitialSamples)<<"%\n"; 
    690690         
    691691         
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.cpp

    r882 r884  
    48444844} 
    48454845 
     4846void 
     4847ViewCellsManager::ApplySpatialFilter( 
     4848                                                                         KdTree *kdTree, 
     4849                                                                         const float spatialFilterSize, 
     4850                                                                         ObjectPvs &pvs 
     4851                                                                         ) 
     4852{ 
     4853 
     4854  // now compute a new Pvs by including also objects intersecting the extended boxes of 
     4855  // visible objects 
     4856 
     4857  Intersectable::NewMail(); 
     4858   
     4859  std::map<Intersectable *, 
     4860        PvsData<Intersectable *>, 
     4861        LtSample<Intersectable *> >::const_iterator oi; 
     4862   
     4863  for (oi = pvs.mEntries.begin(); oi != pvs.mEntries.end(); ++oi) { 
     4864        Intersectable *object = (*oi).first; 
     4865        object->Mail(); 
     4866  } 
     4867 
     4868  ObjectPvs nPvs; 
     4869  int nPvsSize=0; 
     4870  // now go through the pvs again 
     4871  for (oi = pvs.mEntries.begin(); oi != pvs.mEntries.end(); ++oi) { 
     4872        Intersectable *object = (*oi).first; 
     4873 
     4874        //      Vector3 center = object->GetBox().Center(); 
     4875        //      AxisAlignedBox3 box(center - Vector3(spatialFilterSize/2), 
     4876        //                                              center + Vector3(spatialFilterSize/2)); 
     4877 
     4878        AxisAlignedBox3 box = object->GetBox(); 
     4879        box.Enlarge(Vector3(spatialFilterSize/2)); 
     4880 
     4881        ObjectContainer objects; 
     4882 
     4883        // $$ warning collect objects takes only unmailed ones! 
     4884        kdTree->CollectObjects(box, 
     4885                                                   objects); 
     4886        //      cout<<"collected objects="<<objects.size()<<endl; 
     4887        ObjectContainer::const_iterator noi = objects.begin(); 
     4888        for (; noi != objects.end(); ++noi) { 
     4889          Intersectable *o = *noi; 
     4890          // $$ JB warning: pdfs are not correct at this point! 
     4891          nPvs.AddSample(o, Limits::Small); 
     4892          nPvsSize++; 
     4893        } 
     4894  } 
     4895  //  cout<<"nPvs size = "<<nPvsSize<<endl; 
     4896  pvs.Merge(nPvs); 
     4897} 
    48464898 
    48474899void 
     
    48814933  } 
    48824934   
    4883   // now compute a new Pvs by including also objects intersecting the extended boxes of 
    4884   // visible objects 
    4885  
    4886   Intersectable::NewMail(); 
    4887    
    4888   std::map<Intersectable *, 
    4889         PvsData<Intersectable *>, 
    4890         LtSample<Intersectable *> >::const_iterator oi; 
    4891    
    4892   for (oi = pvs.mEntries.begin(); oi != pvs.mEntries.end(); ++oi) { 
    4893         Intersectable *object = (*oi).first; 
    4894         object->Mail(); 
    4895   } 
    4896  
    4897   ObjectPvs nPvs; 
    4898   // now go through the pvs again 
    4899   for (oi = pvs.mEntries.begin(); oi != pvs.mEntries.end(); ++oi) { 
    4900         Intersectable *object = (*oi).first; 
    4901  
    4902         //      Vector3 center = object->GetBox().Center(); 
    4903         //      AxisAlignedBox3 box(center - Vector3(spatialFilterSize/2), 
    4904         //                                              center + Vector3(spatialFilterSize/2)); 
    4905  
    4906         AxisAlignedBox3 box = object->GetBox(); 
    4907         box.Enlarge(Vector3(spatialFilterSize/2)); 
    4908  
    4909         ObjectContainer objects; 
    4910  
    4911         // $$ warning collect objects takes only unmailed ones! 
    4912         kdTree->CollectObjects(box, 
    4913                                                    objects); 
    4914         //      cout<<"collected objects="<<objects.size()<<endl; 
    4915         ObjectContainer::const_iterator noi = objects.begin(); 
    4916         for (; noi != objects.end(); ++noi) { 
    4917           Intersectable *o = *noi; 
    4918           if (!o->Mailed()) 
    4919                 // $$ JB warning: pdfs are not correct at this point! 
    4920                 nPvs.AddSample(o, Limits::Small); 
    4921         } 
    4922   } 
    4923  
    4924   pvs.Merge(nPvs); 
     4935  ApplySpatialFilter(kdTree, spatialFilterSize, pvs); 
    49254936} 
    49264937 
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.h

    r880 r884  
    424424                                ); 
    425425 
     426  void 
     427  ApplySpatialFilter( 
     428                                         KdTree *kdTree, 
     429                                         const float spatialFilterSize, 
     430                                         ObjectPvs &pvs 
     431                                         ); 
     432         
    426433        /** Returns bounding box of a view cell. 
    427434        */ 
     
    447454        static ViewCellsManager *LoadViewCells(const string filename, ObjectContainer *objects); 
    448455 
     456  float GetFilterWidth() { 
     457        return Magnitude(mViewSpaceBox.Size())*mFilterWidth; 
     458  } 
     459   
    449460protected: 
    450461    void 
  • GTP/trunk/Lib/Vis/Preprocessing/src/default.env

    r878 r884  
    99#       filename vienna.x3d 
    1010# filename ../data/vienna/vienna-simple.x3d 
    11 #filename ../data/vienna/vienna-buildings.x3d 
    12 filename ../data/vienna/city1500_flat_1.x3d 
     11filename ../data/vienna/vienna-buildings.x3d 
     12#filename ../data/vienna/city1500_flat_1.x3d 
    1313#filename ../data/vienna/vienna-buildings.x3d;../data/vienna/vienna-roofs.x3d;../data/vienna/vienna-plane.x3d;../data/vienna/vienna-roads.x3d 
    1414# filename ../data/vienna/viewcells-25-sel.x3d 
     
    5353        samplesPerPass  100000 
    5454        initialSamples 500000 
    55         vssSamples 1000000 
    56         vssSamplesPerPass 200000 
    57         useImportanceSampling false 
     55        vssSamples 5000000 
     56        vssSamplesPerPass 500000 
     57        useImportanceSampling true 
    5858        loadInitialSamples  false 
    5959        storeInitialSamples false 
     
    9595        samplesPerPass 500000 
    9696        initialSamples 1000000 
    97         vssSamples 2000000 
     97        vssSamples 5000000 
    9898        vssSamplesPerPass 1000000 
    99         useImportanceSampling false 
     99        useImportanceSampling true 
    100100 
    101101        directionalSampling false 
     
    203203        Filter { 
    204204                maxSize 5 
    205                 width  0.05 
     205                width  0.02 
    206206        } 
    207207 
Note: See TracChangeset for help on using the changeset viewer.