Changeset 532


Ignore:
Timestamp:
01/13/06 02:44:57 (18 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/GtpVisibilityPreprocessor
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/scripts/default.env

    r530 r532  
    99#       filename vienna.x3d 
    1010#       filename ../data/vienna/vienna-simple.x3d 
    11         filename ../data/vienna/vienna-buildings.x3d 
     11#       filename ../data/vienna/vienna-buildings.x3d 
    1212#filename ../data/vienna/vienna-buildings.x3d;../data/vienna/vienna-roofs.x3d 
    1313#;../data/vienna/vienna-plane.x3d 
     
    1515#       filename ../data/atlanta/atlanta2.x3d 
    1616#       filename ../data/soda/soda.dat 
    17 #       filename ../data/soda/soda5.dat 
     17        filename ../data/soda/soda5.dat 
    1818} 
    1919 
     
    2121        # stored sample rays 
    2222        samplesFilename rays.out 
    23         useGlRenderer false 
     23        useGlRenderer true 
    2424#       type sampling 
    2525        type vss 
     
    2929VssPreprocessor { 
    3030        samplesPerPass  100000 
    31         initialSamples 300000 
    32         vssSamples 2000000 
     31        initialSamples 200000 
     32        vssSamples 3000000 
    3333        vssSamplesPerPass 100000 
    3434        useImportanceSampling true 
     
    3636        storeInitialSamples false 
    3737        useViewSpaceBox false 
     38        testBeamSampling true 
    3839} 
    3940 
     
    183184        maxPvsRatio 0.1 
    184185                 
    185         delayedConstruction true 
     186        delayedConstruction false 
    186187                 
    187188                 
     
    257258VspBspTree { 
    258259        Construction { 
    259                 samples 900000 
     260                samples 100000 
    260261                epsilon 0.005 
    261262                randomize false 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Beam.h

    r531 r532  
    5656   
    5757public:                  
    58   enum {STORE_KD_NODES=1, STORE_OBJECTS=2, VALID=4}; 
     58  enum {STORE_KD_NODES=1, STORE_OBJECTS=2, STORE_VIEW_CELLS, VALID=8}; 
    5959  int mFlags; 
    6060   
     
    9090  bool SetValid() { return mFlags |= VALID; } 
    9191 
    92   Beam():mFlags(STORE_KD_NODES+STORE_OBJECTS), mKdNodes(0), mObjects(0) 
     92  Beam():mFlags(STORE_KD_NODES+STORE_OBJECTS), mKdNodes(0), mObjects(0), mViewCells(0) 
    9393  { 
    9494  } 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Environment.cpp

    r517 r532  
    11551155                                 "100000"); 
    11561156   
     1157  RegisterOption("VssPreprocessor.testBeamSampling", optBool, "beam_sampling", "false"); 
     1158 
    11571159  RegisterOption("VssPreprocessor.vssSamples", 
    11581160                                 optInt, 
     
    15741576        RegisterOption("VssTree.queryType", optString, "qtype=", "static"); 
    15751577 
    1576  
     1578         
     1579         
    15771580        RegisterOption("VssTree.queryPosWeight", optFloat, "qposweight=", "0.0"); 
    15781581        RegisterOption("VssTree.useRefDirSplits", optBool, "refdir", "false"); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/GlRenderer.cpp

    r530 r532  
    66#include "Viewcell.h" 
    77#include "Beam.h" 
     8#include "KdTree.h" 
    89 
    910#include <GL/glext.h> 
     
    3031 
    3132GlRenderer::GlRenderer(SceneGraph *sceneGraph, 
    32                                            ViewCellsManager *viewCellsManager): 
    33   Renderer(sceneGraph, viewCellsManager) 
     33                                           ViewCellsManager *viewCellsManager, 
     34                                           KdTree *tree): 
     35  Renderer(sceneGraph, viewCellsManager), 
     36  mKdTree(tree) 
    3437{ 
    3538  mSceneGraph->CollectObjects(&mObjects); 
     
    4346GlRenderer::~GlRenderer() 
    4447{ 
     48        cgDestroyProgram(sCgFragmentProgram); 
     49        cgDestroyContext(sCgContext); 
    4550} 
    4651 
     
    152157  sCgContext = cgCreateContext(); 
    153158 
    154   sCgFragmentProfile = cgGLGetLatestProfile(CG_GL_FRAGMENT); 
     159  if (cgGLIsProfileSupported(CG_PROFILE_ARBFP1)) 
     160          sCgFragmentProfile = CG_PROFILE_ARBFP1; 
     161  else { 
     162          // try FP30 
     163          if (cgGLIsProfileSupported(CG_PROFILE_FP30)) 
     164            sCgFragmentProfile = CG_PROFILE_FP30; 
     165          else { 
     166                  fprintf(stderr, "Neither arbfp1 or fp30 fragment profiles supported on this system.\n"); 
     167                  exit(1); 
     168          } 
     169  } 
    155170 
    156171  sCgFragmentProgram = cgCreateProgramFromFile(sCgContext,               
    157172                                                                                           CG_SOURCE, "../src/dual_depth.cg", 
    158173                                                                                           sCgFragmentProfile, 
    159                                                                                            "dual_depth",  
     174                                                                                           NULL,  
    160175                                                                                           NULL); 
     176 
     177  if (!cgIsProgramCompiled(sCgFragmentProgram)) 
     178          cgCompileProgram(sCgFragmentProgram); 
     179 
     180  cgGLLoadProgram(sCgFragmentProgram); 
     181  cgGLBindProgram(sCgFragmentProgram); 
     182 // Debug << "LAST LISTING----" << cgGetLastListing(sCgContext) << "----\n"; 
     183 
     184  Debug << "---- PROGRAM BEGIN ----\n" <<  
     185          cgGetProgramString(sCgFragmentProgram, CG_COMPILED_PROGRAM) << "---- PROGRAM END ----\n"; 
    161186} 
    162187 
     
    683708        //     this beam is fast - the same hold for step 3) 
    684709 
     710        if (beam.mFlags & !Beam::STORE_OBJECTS) 
     711        { 
     712                vector<KdNode *>::const_iterator it, it_end = beam.mKdNodes.end(); 
     713 
     714                Intersectable::NewMail(); 
     715                for (it = beam.mKdNodes.begin(); it != it_end; ++ it) 
     716                { 
     717                        mKdTree->CollectObjects(*it, beam.mObjects); 
     718                } 
     719        } 
     720 
    685721        // list of objects intersected by the frustum 
    686722#if 0 
     
    704740#endif 
    705741 
     742        // remove objects again 
     743        if (beam.mFlags & !Beam::STORE_OBJECTS) 
     744                beam.mObjects.clear(); 
     745 
    706746        // bind ray origin depth buffer 
    707747        glBindTexture(GL_TEXTURE_2D, depthMap); 
     
    719759        //    stencil buffer bit at step 3) 
    720760        glStencilFunc(GL_EQUAL, 0x1, 0x1); 
    721  
    722         // compare with second depth buffer: done in pixel shader 
    723         cgGLBindProgram(sCgFragmentProgram); 
     761  
     762        //cgGLBindProgram(sCgFragmentProgram); 
    724763        cgGLEnableProfile(sCgFragmentProfile); 
    725764 
  • trunk/VUT/GtpVisibilityPreprocessor/src/GlRenderer.h

    r531 r532  
    1818class Material; 
    1919class Beam; 
     20class KdTree; 
    2021 
    2122class BeamSampleStatistics; 
     
    6667  bool mWireFrame; 
    6768 
     69  KdTree *mKdTree; 
     70 
    6871  QWaitCondition mRenderingFinished; 
    6972   
    7073   
    7174  GlRenderer(SceneGraph *sceneGraph, 
    72                          ViewCellsManager *viewcells); 
     75                         ViewCellsManager *viewcells, 
     76                         KdTree *tree); 
    7377   
    7478  ~GlRenderer(); 
     
    103107class GlRendererBuffer : public QGLPixelBuffer, public GlRenderer 
    104108{ 
    105  
    106109public: 
    107   int mPvsStatFrames; 
    108   vector<float> mPvsErrorBuffer; 
    109    
    110   PvsRenderStatistics mPvsStat; 
    111  
    112  
    113   GlRendererBuffer(const int w, 
    114                                    const int h, 
    115                                    SceneGraph *sceneGraph, 
    116                                    ViewCellsManager *viewcells): 
    117         QGLPixelBuffer(QSize(w, h)), GlRenderer(sceneGraph, viewcells) { 
     110        GlRendererBuffer(const int w, 
     111                                         const int h, 
     112                                         SceneGraph *sceneGraph, 
     113                                         ViewCellsManager *viewcells, 
     114                                         KdTree *tree): 
     115        QGLPixelBuffer(QSize(w, h)), GlRenderer(sceneGraph, viewcells, tree) { 
    118116 
    119117        mPvsStatFrames = 10000; 
     
    125123        doneCurrent(); 
    126124 
    127   } 
     125        } 
    128126   
    129127  void 
     
    154152                                                           ); 
    155153 
     154   PvsRenderStatistics mPvsStat; 
     155    
     156   int mPvsStatFrames; 
     157   vector<float> mPvsErrorBuffer; 
     158 
    156159private: 
    157160        static void GenQueries(const int numQueries); 
     
    175178  GlRendererWidget(SceneGraph *sceneGraph, 
    176179                                   ViewCellsManager *viewcells, 
     180                                   KdTree *tree, 
    177181                                   QWidget * parent = 0, const QGLWidget * shareWidget = 0, Qt::WFlags f = 0 
    178182                                   ): 
    179         GlRenderer(sceneGraph, viewcells), QGLWidget(parent, shareWidget, f) 
     183        GlRenderer(sceneGraph, viewcells, tree), QGLWidget(parent, shareWidget, f) 
    180184  { 
    181185        mTopView = false; 
     
    204208  virtual int GetWidth() const { return width(); } 
    205209  virtual int GetHeight() const { return height(); } 
    206  
    207210}; 
    208211 
  • trunk/VUT/GtpVisibilityPreprocessor/src/KdTree.cpp

    r512 r532  
    10051005  } 
    10061006 
     1007  if (beam.mFlags & Beam::STORE_OBJECTS) 
     1008  { 
     1009          vector<KdNode *>::const_iterator it, it_end = beam.mKdNodes.end(); 
     1010 
     1011          Intersectable::NewMail(); 
     1012          for (it = beam.mKdNodes.begin(); it != it_end; ++ it) 
     1013          { 
     1014                  CollectObjects(*it, beam.mObjects); 
     1015          } 
     1016  } 
     1017 
    10071018  return beam.mKdNodes.size(); 
    10081019} 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Preprocessor.cpp

    r520 r532  
    256256        } 
    257257        if (mUseGlRenderer) 
    258           renderer = new GlRendererBuffer(1024, 768, mSceneGraph, mViewCellsManager); 
     258          renderer = new GlRendererBuffer(1024, 768, mSceneGraph, mViewCellsManager, mKdTree); 
    259259         
    260260        return true; 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellBsp.h

    r508 r532  
    4444                                           const float epsilon) const; 
    4545 
    46         /** Computes bounding box of the node. 
     46        /** Computes bounding box of the geometry. 
    4747        */ 
    4848        void ComputeBoundingBox(AxisAlignedBox3 &box); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellsManager.cpp

    r527 r532  
    1212#include "VspBspTree.h" 
    1313#include "ViewCellsParser.h" 
     14#include "Beam.h" 
     15 
     16 
    1417 
    1518 
     
    311314} 
    312315 
     316 
     317int ViewCellsManager::CastBeam(Beam &beam) 
     318{ 
     319        return 0; 
     320} 
    313321 
    314322ViewCellContainer &ViewCellsManager::GetViewCells() 
     
    24312439        return true; 
    24322440} 
     2441 
     2442 
     2443int VspBspViewCellsManager::CastBeam(Beam &beam) 
     2444{ 
     2445        return 0; 
     2446} 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellsManager.h

    r527 r532  
    2525class ViewCellsStatistics; 
    2626class Exporter; 
     27class Beam; 
    2728 
    2829struct BspRay; 
     
    246247        virtual bool ExportViewCells(const string filename); 
    247248 
     249        /** Casts beam to collect view cells. 
     250        */ 
     251        virtual int CastBeam(Beam &beam); 
     252 
    248253protected: 
    249254 
     
    566571        bool ExportViewCells(const string filename); 
    567572 
     573        int CastBeam(Beam &beam); 
     574 
    568575protected: 
    569576 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VspBspTree.cpp

    r517 r532  
    1616#include "ViewCellBsp.h" 
    1717#include "ViewCellsManager.h" 
    18  
     18#include "Beam.h" 
    1919 
    2020//-- static members 
     
    14641464} 
    14651465 
     1466 
    14661467void VspBspTree::CollectViewCells(ViewCellContainer &viewCells) const 
     1468{ 
     1469        ViewCell::NewMail(); 
     1470        CollectViewCells(mRoot, viewCells, true); 
     1471} 
     1472 
     1473 
     1474void VspBspTree::CollectViewCells(BspNode *root,  
     1475                                                                  ViewCellContainer &viewCells, 
     1476                                                                  bool onlyUnmailed) const 
    14671477{ 
    14681478        stack<BspNode *> nodeStack; 
     
    14721482 
    14731483        nodeStack.push(mRoot); 
    1474  
    1475         ViewCell::NewMail(); 
    14761484         
    14771485        while (!nodeStack.empty())  
     
    14861494                                ViewCell *viewCell = dynamic_cast<BspLeaf *>(node)->GetViewCell(); 
    14871495                         
    1488                                 if (!viewCell->Mailed())  
     1496                                if (!onlyUnmailed || !viewCell->Mailed())  
    14891497                                { 
    14901498                                        viewCell->Mail(); 
     
    21462154                } 
    21472155        } 
     2156} 
     2157 
     2158 
     2159typedef pair<BspNode *, BspNodeGeometry *> bspNodePair; 
     2160 
     2161int VspBspTree::CastBeam(Beam &beam) 
     2162{ 
     2163    stack<bspNodePair> nodeStack; 
     2164        BspNodeGeometry *rgeom = new BspNodeGeometry(); 
     2165        ConstructGeometry(mRoot, *rgeom); 
     2166 
     2167        nodeStack.push(bspNodePair(mRoot, rgeom)); 
     2168   
     2169        ViewCell::NewMail(); 
     2170 
     2171        while (!nodeStack.empty())  
     2172        { 
     2173                BspNode *node = nodeStack.top().first; 
     2174                BspNodeGeometry *geom = nodeStack.top().second; 
     2175                nodeStack.pop(); 
     2176                 
     2177                AxisAlignedBox3 box; 
     2178                geom->ComputeBoundingBox(box); 
     2179 
     2180                int side = beam.ComputeIntersection(box); 
     2181                 
     2182                switch (side)  
     2183                { 
     2184                case -1: 
     2185                        CollectViewCells(node, beam.mViewCells, true); 
     2186                        break; 
     2187                case 0: 
     2188                        if (node->IsLeaf()) 
     2189                        { 
     2190                                BspLeaf *leaf = dynamic_cast<BspLeaf *>(leaf); 
     2191                                if (!leaf->GetViewCell()->Mailed() && leaf->TreeValid()) 
     2192                                        beam.mViewCells.push_back(leaf->GetViewCell()); 
     2193                        } 
     2194                        else  
     2195                        { 
     2196                                BspInterior *interior = dynamic_cast<BspInterior *>(node); 
     2197                                BspNode *first = interior->GetBack(); 
     2198                                BspNode *second = interior->GetFront(); 
     2199                 
     2200                                // decide on the order of the nodes 
     2201                                if (DotProd(beam.mPlanes[0].mNormal,  
     2202                                        interior->GetPlane().mNormal) > 0) 
     2203                                { 
     2204                                        swap(first, second); 
     2205                                } 
     2206 
     2207                                BspNodeGeometry *leftGeom = new BspNodeGeometry(); 
     2208                                BspNodeGeometry *rightGeom = new BspNodeGeometry(); 
     2209 
     2210                                ConstructGeometry(first, *leftGeom); 
     2211                                ConstructGeometry(second, *rightGeom); 
     2212 
     2213                                nodeStack.push(bspNodePair(first, leftGeom)); 
     2214                                nodeStack.push(bspNodePair(second, rightGeom)); 
     2215                        } 
     2216                        break; 
     2217                        // default: cull 
     2218                } 
     2219                DEL_PTR(geom); 
     2220        } 
     2221 
     2222        return beam.mViewCells.size(); 
    21482223} 
    21492224 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VspBspTree.h

    r520 r532  
    2222class ViewCellsManager; 
    2323class BspMergeCandidate; 
     24class Beam; 
     25 
    2426struct BspRay; 
    2527 
     
    286288        bool Export(ofstream &stream); 
    287289 
     290        /** Casts beam, i.e. a 5D frustum of rays, into tree. 
     291                Tests conservative using the bounding box of the nodes. 
     292                @returns number of view cells it intersected 
     293        */ 
     294        int CastBeam(Beam &beam); 
     295 
     296        void CollectViewCells(BspNode *root,  
     297                                                  ViewCellContainer &viewCells, 
     298                                                  bool onlyUnmailed = false) const; 
    288299protected: 
    289300 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VssPreprocessor.cpp

    r531 r532  
    3232  environment->GetBoolValue("VssPreprocessor.storeInitialSamples", mStoreInitialSamples); 
    3333  environment->GetBoolValue("VssPreprocessor.useViewSpaceBox", mUseViewSpaceBox); 
     34  environment->GetBoolValue("VssPreprocessor.testBeamSampling", mTestBeamSampling); 
     35 
    3436  useViewspacePlane = mUseViewSpaceBox; //hack 
    3537 
     
    349351 
    350352 
    351 void VssPreprocessor::TestBeamCasting(VssTree *tree) 
    352 { 
    353  
     353void VssPreprocessor::TestBeamCasting(VssTree *tree, ViewCellsManager *vm) 
     354{ 
    354355        vector<VssTreeLeaf *> leaves; 
    355356        tree->CollectLeaves(leaves); 
     
    363364                AxisAlignedBox3 dirBox =tree->GetDirBBox(leaf); 
    364365                AxisAlignedBox3 box = tree->GetBBox(leaf); 
     366                 
    365367                beam.Construct(dirBox, box); 
     368 
     369                // collect kd leaves and view cells 
     370                mKdTree->CastBeam(beam); 
     371                vm->CastBeam(beam); 
     372 
     373                Debug << "found " << beam.mViewCells.size() << " view cells and "  
     374                          << beam.mKdNodes.size() << " kd nodes" << endl; 
     375 
    366376                Intersectable *sourceObj = mObjects[5]; 
    367377                BeamSampleStatistics stats; 
     
    371381                                                                                  stats); 
    372382 
    373                 Debug << "beam statistics: " << stats << endl; 
    374  
    375  
     383                Debug << "beam statistics: " << stats << endl << endl; 
    376384        } 
    377385 
     
    581589  int pass = 0; 
    582590 
     591  if (mTestBeamSampling) 
     592          TestBeamCasting(vssTree, mViewCellsManager); 
     593 
    583594  // cast view cell samples 
    584595  while (1) { 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VssPreprocessor.h

    r531 r532  
    105105  void CastRay(const BspTree &tree, const VssRay & vssRay); 
    106106 
    107   void TestBeamCasting(VssTree *tree); 
     107  void TestBeamCasting(VssTree *tre, ViewCellsManager *vm); 
     108 
     109  bool mTestBeamSampling; 
    108110}; 
    109111 
  • trunk/VUT/GtpVisibilityPreprocessor/src/dual_depth.cg

    r530 r532  
    1212}; 
    1313 
    14 pixel dual_depth(fragment IN, 
    15                              const uniform sampler2D depthMap) 
     14pixel main(fragment IN, const uniform sampler2D depthMap) 
    1615{ 
    1716        pixel OUT; 
  • trunk/VUT/GtpVisibilityPreprocessor/src/main.cpp

    r496 r532  
    9494  if (p->mUseGlRenderer) { 
    9595         
    96         rendererWidget = new GlRendererWidget(p->mSceneGraph, p->mViewCellsManager); 
     96          rendererWidget = new GlRendererWidget(p->mSceneGraph, p->mViewCellsManager, p->mKdTree); 
    9797        //  renderer->resize(640, 480); 
    9898        rendererWidget->resize(640, 480); 
Note: See TracChangeset for help on using the changeset viewer.