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

Legend:

Unmodified
Added
Removed
  • 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.