Changeset 321


Ignore:
Timestamp:
10/12/05 18:29:46 (19 years ago)
Author:
mattausch
Message:
 
Location:
trunk/VUT/GtpVisibilityPreprocessor
Files:
10 edited

Legend:

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

    r320 r321  
    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/viewcells-25-sel.x3d 
    13 #       filename ../data/atlanta/atlanta2.x3d 
     13        filename ../data/atlanta/atlanta2.x3d 
    1414#       filename ../data/soda/soda.dat 
    1515#       filename ../data/soda/soda5.dat 
     
    5656 
    5757Sampling { 
    58         totalSamples    500000 
    59         samplesPerPass  10 
     58        totalSamples    100 
     59        samplesPerPass  20 
    6060} 
    6161 
    6262ViewCells { 
    6363        hierarchyType bspTree 
    64         height 7.0 
     64        height 5.0 
    6565        maxViewCells 0 
    6666        #hierarchyType kdTree 
    6767        #hierarchyType sceneDependent 
    6868#       filename ../data/atlanta/atlanta_viewcells_large.x3d 
    69         filename ../data/vienna/viewcells-25-sel.x3d 
    70 #       filename ../data/vienna/viewcells-25.x3d 
     69#       filename ../data/vienna/viewcells-25-sel.x3d 
     70        filename ../data/vienna/viewcells-25.x3d 
    7171#       filename ../data/vienna/viewcells-large-sel.x3d 
    7272} 
     
    7474BspTree { 
    7575#       constructionMethod fromRays 
    76         constructionMethod fromViewCells 
    77 #       constructionMethod fromSceneGeometry 
     76#       constructionMethod fromViewCells 
     77        constructionMethod fromSceneGeometry 
    7878 
    79         # next polygon         = 1 
     79        # random polygon       = 1 
    8080        # axis aligned         = 2 
    8181        # least splits         = 4 
     
    101101        #splitPlaneStrategy 72 
    102102         
    103         splitPlaneStrategy 66 
     103        splitPlaneStrategy 72 
    104104         
    105105        maxCandidates 50 
     
    107107        Termination { 
    108108                maxPolysForAxisAligned 100 
    109                 maxPolygons 0 
    110                 maxDepth 200 
     109                maxPolygons 30 
     110                maxDepth 100 
    111111        } 
     112        # if split polys are stored for visualization 
     113        storeSplitPolys false 
     114        # x3d visualization of the split planes 
     115        exportSplits true 
    112116} 
  • trunk/VUT/GtpVisibilityPreprocessor/src/AxisAlignedBox3.cpp

    r318 r321  
    16571657        bool operator<(const VertexData &b) const  
    16581658        { 
    1659                 return mAngle < b.mAngle; 
     1659                return mAngle > b.mAngle; 
    16601660        } 
    16611661}; 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Environment.cpp

    r313 r321  
    11851185                 "100"); 
    11861186 
     1187  RegisterOption("BspTree.storeSplitPolys", 
     1188                 optBool, 
     1189                 "-bsp_store_split_polys=", 
     1190                 "false"); 
     1191 
    11871192  RegisterOption("BspTree.splitPlaneStrategy", 
    11881193                optString, 
     
    11991204          "-view_cells_max_viewcells=", 
    12001205          "0"); 
     1206   
     1207  RegisterOption("BspTree.exportSplits", 
     1208          optBool, 
     1209          "-bsp_exportSplits", 
     1210          "false"); 
    12011211} 
    12021212 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Polygon3.cpp

    r319 r321  
    3535Plane3 Polygon3::GetSupportingPlane() const 
    3636{ 
    37         Vector3 v1 = mVertices[0] - mVertices[1]; 
    38         Vector3 v2 = mVertices[2] - mVertices[1]; 
    39 #ifdef _DEBUG 
    40         Debug << "plane spanned by " <<  v1 << ", " << v2  << endl; 
    41 #endif 
    4237        return Plane3(mVertices[0], mVertices[1], mVertices[2]); 
    4338} 
     
    4540Vector3 Polygon3::GetNormal() const  
    4641{ 
    47     return Normalize(CrossProd(mVertices[0] - mVertices[1], 
    48                                                            mVertices[2] - mVertices[1])); 
     42    return Normalize(CrossProd(mVertices[2] - mVertices[1], 
     43                                                           mVertices[0] - mVertices[1])); 
    4944} 
    5045 
     
    130125     
    131126    //Debug << "area2: " << 0.5f * fabs(DotProd(GetNormal(), v)) << endl;   
    132  
    133127        return 0.5f * fabs(DotProd(GetNormal(), v)); 
    134128} 
     
    170164                } 
    171165                // 3 vertices enough to decide coincident 
    172                 else if (((++ count) >= 3) && !onFrontSide && !onBackSide)  
     166                else if (((++ count) >= 3) && !onFrontSide && !onBackSide) 
     167                //      && (DotProd(GetSupportingPlane().mNormal, plane.mNormal)  > 0)) 
     168                {    
    173169                        return COINCIDENT;  
     170                } 
    174171        } 
    175172 
     
    182179                return FRONT_SIDE; 
    183180        } 
    184  
     181        //if (DotProd(GetNormal(), plane.mNormal)  < 0) return FRONT_SIDE; 
    185182        return COINCIDENT; // plane and polygon are coincident 
    186183} 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Polygon3.h

    r319 r321  
    7777        /** Returns the surface normal. 
    7878        */ 
    79         Vector3 GetNormal() const; 
     79        inline Vector3 GetNormal() const; 
    8080 
    8181        /** Includes polygons to axis aligned box. 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Preprocessor.cpp

    r319 r321  
    1010mKdTree(NULL), 
    1111mBspTree(NULL), 
    12 mRootViewCell(NULL), 
    1312mViewCellsType(BSP_VIEW_CELLS) 
    1413{ 
     
    2120        DEL_PTR(mBspTree); 
    2221        DEL_PTR(mKdTree); 
    23         DEL_PTR(mRootViewCell); 
    2422} 
    2523 
     
    150148{ 
    151149        DEL_PTR(mBspTree); 
    152         DEL_PTR(mRootViewCell); 
    153         mRootViewCell = new ViewCell(NULL); 
    154         mBspTree = new BspTree(mRootViewCell); 
     150         
     151        mBspTree = new BspTree(&mUnbounded); 
    155152 
    156153        ObjectContainer objects; 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Preprocessor.h

    r310 r321  
    88#include "KdTree.h" 
    99#include "ViewCellBsp.h" 
     10#include "ViewCell.h" 
    1011//#include "SceneGraph.h" 
    1112 
     
    112113  BspTree *mBspTree; 
    113114 
    114   /// the root view cell of the bsp tree 
    115   ViewCell *mRootViewCell; 
     115  /// the view cell corresponding to unbounded space 
     116  ViewCell mUnbounded; 
    116117 
    117118  /// view cell hierarchy types 
  • trunk/VUT/GtpVisibilityPreprocessor/src/SamplingPreprocessor.cpp

    r320 r321  
    6666        int j; 
    6767  
    68         // add object to view cell 
     68        // object can be seen from the view cell => add to view cell pvs 
    6969        for (j=0; j < ray.viewCells.size(); ++ j)  
    70         {  
    71                 ViewCell *vc = ray.viewCells[j]; 
    72  
    73                 contributingSamples += vc->GetPvs().AddSample(obj); 
     70        {       // if ray not in unbounded space 
     71                if (ray.viewCells[j] != &mUnbounded) 
     72                        contributingSamples += ray.viewCells[j]->GetPvs().AddSample(obj); 
    7473        } 
    7574  
     75        // rays passing through this viewcell 
    7676        if (mPass > 1) 
    7777                for (j=1; j < ((int)ray.viewCells.size() - 1); ++ j)  
    7878                { 
    79             ray.viewCells[j]->AddPassingRay(ray, contributingSamples ? 1 : 0); 
     79                        if (ray.viewCells[j] != &mUnbounded) 
     80                                ray.viewCells[j]->AddPassingRay(ray, contributingSamples ? 1 : 0); 
    8081                } 
    8182  
     
    103104        int sampleContributions = 0; 
    104105 
     106        // cast ray to KD tree to find intersection with other objects 
     107        mKdTree->CastRay(ray); 
     108 
    105109        if (mViewCellsType == BSP_VIEW_CELLS) 
    106110        { 
    107                 // cast ray to KD tree to find intersection with other objects 
    108                 mKdTree->CastRay(ray); 
    109                  
    110111                // cast ray to BSP tree to get intersection with view cells 
    111112                mBspTree->CastRay(ray); 
     
    121122        else 
    122123        { 
    123                 mKdTree->CastRay(ray); 
    124          
    125124                if (ray.leaves.size()) { 
    126125                        sampleContributions += AddNodeSamples(object, ray); 
     
    233232  int vcPvsOut = Min((int)mViewCells.size(), 5); 
    234233 
     234  ViewCellContainer pvsViewCells; 
     235 
     236  // some random view cells for output 
     237  for (int j = 0; j < vcPvsOut; ++ j) 
     238  { 
     239          int idx = Random((int)mViewCells.size()); 
     240          Debug << "output view cell no. " << idx << endl; 
     241          pvsViewCells.push_back(mViewCells[Random((int)mViewCells.size())]); 
     242  } 
     243 
    235244  vector<Ray> rays[10]; 
    236245  vector<Ray> vcRays[5]; 
     
    245254                int index = 0; 
    246255                         
     256                Debug << "starting new loop " << totalSamples << endl; 
     257 
    247258                // construct Bsp tree if not 
    248259                if ((mViewCellsType == Preprocessor::BSP_VIEW_CELLS) && 
     
    251262                        BuildBspTree(); 
    252263                } 
    253  
     264Debug << "here" << totalSamples << endl; 
    254265                for (i = 0; i < objects.size(); i++) { 
    255266                        KdNode *nodeToSample = NULL; 
     
    351362                                                // check whether we can add this to the rays 
    352363                                                for (int k = 0; k < ray.viewCells.size(); ++ k) 
    353                                                         for (int j = 0; j < vcPvsOut; ++ j)  
    354                                                                 if (mViewCells[j] == ray.viewCells[k])  
     364                                                        for (int j = 0; j < (int)pvsViewCells.size(); ++ j)  
     365                                                                if (pvsViewCells[j] == ray.viewCells[k])  
    355366                                                                { 
    356367                                                                        vcRays[j].push_back(ray); 
     
    465476      if (mViewCellsType == BSP_VIEW_CELLS) 
    466477          { 
    467                    for (int j = 0; j < vcPvsOut; ++ j) 
     478                   for (int j = 0; j < pvsViewCells.size(); ++ j) 
    468479                   { 
    469                            ViewCell *vc = mViewCells[j]; 
     480                           ViewCell *vc = pvsViewCells[j]; 
    470481 
    471482                           Intersectable::NewMail(); 
     
    491502                           exporter->SetForcedMaterial(m); 
    492503 
    493                            exporter->ExportBspTree(*mBspTree); 
     504                           if (1) 
     505                           { 
     506                                   exporter->ExportViewCells(mViewCells); 
     507                           } 
     508 
     509                           // export rays piercing this view cell 
    494510                           exporter->ExportRays(vcRays[j], 1000, RgbColor(0, 1, 0)); 
    495511 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellBsp.h

    r319 r321  
    524524        /// Strategies for choosing next split plane. 
    525525        enum {NO_STRATEGY = 0, 
    526                   NEXT_POLYGON = 1,  
     526                  RANDOM_POLYGON = 1,  
    527527                  AXIS_ALIGNED = 2, 
    528528                  LEAST_SPLITS = 4,  
     
    536536        /// box around the whole view domain 
    537537        AxisAlignedBox3 mBox; 
    538  
    539         /// if polygons should be stored in the tree 
    540         bool mStoreSplitPolys; 
    541538 
    542539        /// view cell corresponding to unbounded space 
     
    571568        static float sLargestPolyAreaFactor; 
    572569        static float sBlockedRaysFactor; 
     570         
     571        /// if polygons should be stored in the tree 
     572        static bool sStoreSplitPolys; 
    573573 
    574574private: 
  • trunk/VUT/GtpVisibilityPreprocessor/src/main.cpp

    r319 r321  
    1010#include "X3dExporter.h" // delete later 
    1111#include "ViewCell.h" 
     12#include "SceneGraph.h" 
    1213 
    1314#define USE_EXE_PATH false 
     
    5960          p->BspTreeStatistics(Debug); 
    6061          p->Export("vc_bsptree2.x3d", false, false, true); 
     62          
     63          bool exportSplits = false; 
     64          environment->GetBoolValue("BspTree.exportSplits", exportSplits); 
     65 
    6166          // export the bsp splits 
    62           Exporter *exporter = Exporter::GetExporter("bsp_splits.x3d"); 
     67          if (exportSplits) 
     68          { 
     69                  Exporter *exporter = Exporter::GetExporter("bsp_splits.x3d"); 
    6370 
    64           if (exporter)  
    65           {      
    66           Material m;  
    67                   m.mDiffuseColor = RgbColor(1, 0, 0); 
    68                   exporter->SetForcedMaterial(m); 
    69                   exporter->SetWireframe();//exporter->SetFilled(); 
    70                   exporter->ExportBspSplits(*p->mBspTree); 
     71                  if (exporter)  
     72                  {      
     73                          Material m;  
     74                          m.mDiffuseColor = RgbColor(1, 0, 0); 
     75                          exporter->SetForcedMaterial(m); 
     76                          exporter->SetWireframe(); 
     77                          exporter->ExportBspSplits(*p->mBspTree); 
    7178 
    72                   //m.mDiffuseColor = RgbColor(0, 1, 0); 
    73                   //exporter->SetForcedMaterial(m); 
    74                   exporter->SetFilled(); 
     79                          // take forced material because does not load for big scenes otherwise 
     80                          m.mDiffuseColor = RgbColor(0, 1, 0); 
     81                          exporter->SetForcedMaterial(m); 
     82                          exporter->SetFilled(); 
    7583 
    76                   exporter->ResetForcedMaterial(); 
    77                   exporter->ExportViewCells(p->mViewCells); 
     84                          exporter->ResetForcedMaterial(); 
    7885 
    79                   delete exporter; 
     86                          if (1) 
     87                          { 
     88                                  ObjectContainer objects; 
     89                                  p->mSceneGraph->CollectObjects(&objects); 
     90                  Material m;//= RandomMaterial(); 
     91                                  m.mDiffuseColor = RgbColor(0, 0, 1); 
     92                                  exporter->SetForcedMaterial(m); 
     93                  
     94                                  for (int j = 0; j < objects.size(); ++ j) 
     95                                           exporter->ExportIntersectable(objects[j]); 
     96                         
     97                                  delete exporter; 
     98                          } 
     99                  } 
    80100          } 
    81101#if 0 
Note: See TracChangeset for help on using the changeset viewer.