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

Spatial visibility filter

File:
1 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} 
Note: See TracChangeset for help on using the changeset viewer.