Changeset 444 for trunk/VUT


Ignore:
Timestamp:
12/02/05 19:46:07 (19 years ago)
Author:
mattausch
Message:

fixed error in ray to vssray conversion

Location:
trunk/VUT/GtpVisibilityPreprocessor
Files:
13 edited

Legend:

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

    r441 r444  
    112112                minPvs 10 
    113113                maxPvs 150 
    114                 samples 100000 
     114                samples 10 
    115115        } 
    116116 
     
    167167        maxRayCandidates 50 
    168168         
    169         maxTests 500 
     169        maxTests 10000 
    170170         
    171171        # factors for evaluating split plane costs 
     
    184184        Termination { 
    185185                # parameters used for autopartition 
    186                 minRays 300 
     186                minRays 200 
    187187                minPolygons -1 
    188                 maxDepth 40 
    189                 minPvs 200 
     188                maxDepth 50 
     189                minPvs 100 
    190190                minArea 0.01 
    191191                maxRayContribution 0.005 
     
    214214                exportSplits true 
    215215                # how much samples should be used in visualization 
    216                 samples 20000 
     216                samples 90000 
    217217        } 
    218218} 
     
    255255         
    256256        Termination { 
    257                 maxDepth                30 
     257                maxDepth                40 
    258258                minPvs                  50 
    259259                minRays                 1 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Mesh.cpp

    r382 r444  
    8585int 
    8686Mesh::CastRay( 
    87                                                         Ray &ray, 
    88                                                         MeshInstance *instance 
    89                                                         ) 
     87                          Ray &ray, 
     88                          MeshInstance *instance 
     89                          ) 
    9090{ 
    9191  if (mKdTree) { 
     
    325325int 
    326326MeshInstance::CastRay( 
    327                                                                                         Ray &ray 
    328                                                                                         ) 
     327                                          Ray &ray 
     328                                          ) 
    329329{ 
    330330  int res = mMesh->CastRay(ray, this); 
     
    334334int 
    335335MeshInstance::CastRay( 
    336                                                                                         Ray &ray, 
    337                                                                                         const vector<int> &faces 
    338                                                                                         ) 
     336                                          Ray &ray, 
     337                                          const vector<int> &faces 
     338                                          ) 
    339339{ 
    340340  return mMesh->CastRayToSelectedFaces(ray, faces, this); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Preprocessor.cpp

    r441 r444  
    210210        mViewCellsManager->SetVisualizationSamples(visSamples); 
    211211 
     212        //Debug << "Visualization samples: " << mViewCellsManager->GetVisualizationSamples() << endl; 
    212213 
    213214        //-- parse view cells construction method 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Ray.cpp

    r441 r444  
    222222Ray::Ray(const VssRay &vssRay): 
    223223loc(vssRay.mOrigin), 
    224 sourceObject(0, vssRay.mOriginObject, 0) 
     224sourceObject(0, vssRay.mOriginObject, 0), 
     225mType(LOCAL_RAY) 
    225226{ 
    226227        const float dist = Distance(vssRay.mTermination, vssRay.mOrigin); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/SamplingPreprocessor.cpp

    r441 r444  
    3232                                                           const Ray::Intersection &origin) 
    3333{ 
    34   ray.intersections.clear(); 
    35   ray.kdLeaves.clear(); 
    36   ray.testedObjects.clear(); 
    37   ray.bspIntersections.clear(); 
     34        ray.intersections.clear(); 
     35        ray.kdLeaves.clear(); 
     36        ray.testedObjects.clear(); 
     37        ray.bspIntersections.clear(); 
    3838   
    3939        ray.mFlags |= Ray::STORE_KDLEAVES | Ray::STORE_BSP_INTERSECTIONS; 
    40   //  cout<<point<<" "<<direction<<endl; 
    41   ray.Init(point, direction, type); 
     40        //  cout<<point<<" "<<direction<<endl; 
     41 
     42        ray.Init(point, direction, type); 
    4243        ray.sourceObject = origin; 
    4344} 
     
    319320                                        Ray *ray = new Ray(); 
    320321 
    321                                         // the source object 
    322                                         Ray::Intersection source =  
    323                                                 Ray::Intersection(0, reverseSample ? NULL : object, faceIndex); 
    324                          
    325322                                        // construct a ray 
    326                                         SetupRay(*ray, point, direction, Ray::LOCAL_RAY, source); 
     323                                        SetupRay(*ray, point, direction, Ray::LOCAL_RAY,  
     324                                                         Ray::Intersection(0, reverseSample ? NULL : object, faceIndex)); 
     325 
    327326                                        passRays.push_back(ray); 
    328327                                         
     
    428427                { 
    429428                        for (it = newRays.begin(); it != it_end; ++ it) 
     429                        { 
    430430                                mVssSampleRays.push_back(new VssRay(*(*it))); 
     431                        } 
    431432                } 
    432433                else 
    433434                { 
     435                        // construct view cells using the collected samples 
     436                        cout << "building view cells from " << (int)mVssSampleRays.size() << " samples " << endl; 
     437 
    434438                        mViewCellsManager->Construct(objects, mVssSampleRays); 
    435          
    436                         // construct view cells using the collected samples 
    437                         cout << "building view cells from " << (int)mSampleRays.size() << " samples " << endl; 
    438                  
    439                         // add contributions of saved samples to PVS 
    440                         //contributingSamples += mBspTree->GetStat().contributingSamples; 
    441                         //sampleContributions += mBspTree->GetStat().sampleContributions; 
    442  
     439                         
    443440                        // throw away samples  
    444441                        CLEAR_CONTAINER(mVssSampleRays); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellBsp.cpp

    r442 r444  
    226226void BspLeaf::AddToPvs(const BoundedRayContainer &rays,  
    227227                                           int &sampleContributions, 
    228                                            int &contributingSamples, 
    229                                            bool storeLeavesWithRays) 
     228                                           int &contributingSamples) 
    230229{ 
    231230        sampleContributions = 0; 
     
    246245                        contribution += mViewCell->GetPvs().AddSample(ray->sourceObject.mObject); 
    247246 
    248                 if (contribution > 0) 
     247                if (contribution) 
    249248                { 
    250249                        sampleContributions += contribution; 
    251250                        ++ contributingSamples; 
    252251                } 
    253                  
    254                 if (storeLeavesWithRays) 
    255                         // warning: intersections not ordered 
     252 
     253                //if (ray->mFlags & Ray::STORE_BSP_INTERSECTIONS) 
    256254                        ray->bspIntersections.push_back(Ray::BspIntersection((*it)->mMinT, this)); 
    257255        } 
     
    632630 
    633631        // generate view cells 
    634         mGenerateViewCells = false; 
     632        mGenerateViewCells = true; 
    635633 
    636634        long startTime = GetTime(); 
     
    14521450 
    14531451        // bound ray or line segment 
    1454         if ((ray.GetType() == Ray::LOCAL_RAY) &&  
     1452        if (//(ray.GetType() == Ray::LOCAL_RAY) &&  
    14551453            !ray.intersections.empty() &&  
    14561454                (ray.intersections[0].mT <= maxT)) 
     
    20722070                                const float newT = t * bRay->mMaxT; 
    20732071 
    2074                                 backRays.push_back(new BoundedRay(ray, bRay->mMinT, newT)); 
    2075                                 frontRays.push_back(new BoundedRay(ray, newT, bRay->mMaxT)); 
     2072                                backRays.push_back(new BoundedRay(ray, minT, newT)); 
     2073                                frontRays.push_back(new BoundedRay(ray, newT, maxT)); 
     2074 
    20762075                                DEL_PTR(bRay); 
    20772076 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellBsp.h

    r443 r444  
    335335        void AddToPvs(const BoundedRayContainer &rays,  
    336336                                  int &sampleContributions, 
    337                                   int &contributingSamples,  
    338                                   bool storeLeavesWithRays = false); 
     337                                  int &contributingSamples); 
    339338 
    340339protected: 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellsManager.cpp

    r443 r444  
    8080    for (it = rays.begin(); it != it_end; ++ it) 
    8181        { 
    82                 sampleContributions +=ComputeSampleContributions(*(*it), castRays); 
     82                sampleContributions += ComputeSampleContributions(*(*it), castRays); 
    8383                contributingSamples += sampleContributions > 0; 
    8484        } 
     
    182182void ViewCellsManager::SetVisualizationSamples(const int visSamples) 
    183183{ 
    184         int mVisualizationSamples = visSamples; 
     184        mVisualizationSamples = visSamples; 
    185185} 
    186186 
     
    257257 
    258258        Debug << mBspTree->GetStatistics() << endl; 
    259         CLEAR_CONTAINER(sampleRays); 
    260  
     259         
    261260        return sampleContributions; 
    262261} 
     
    287286                        BspLeaf *leaf = ray.bspIntersections[j].mLeaf; 
    288287                 
    289                         // if ray not in unbounded space 
     288                        // if ray not outside of view space 
    290289                        if (leaf->GetViewCell() != mBspTree->GetRootCell()) 
    291290                        { 
     
    518517        //-- some rays for output 
    519518        const int raysOut = min((int)sampleRays.size(), mVisualizationSamples); 
    520         cout << "visualization using " << mVisualizationSamples << " samples" << endl; 
    521         vector<Ray *> vcRays[leafOut]; 
    522  
    523         if (0) 
     519        Debug << "visualization using " << raysOut << " samples" << endl; 
     520         
     521 
     522        if (1) 
    524523        { 
    525524                //-- some random view cells and rays for output 
     
    531530                for (int i = 0; i < bspLeaves.size(); ++ i) 
    532531                { 
     532                        BspLeaf *leaf = bspLeaves[i]; 
     533 
     534                        RayContainer vcRays; 
     535                 
    533536                        cout << "creating output for view cell " << i << " ... "; 
     537 
    534538                        // check whether we can add the current ray to the output rays 
    535539                        for (int k = 0; k < raysOut; ++ k)  
     
    539543                                for     (int j = 0; j < (int)ray->bspIntersections.size(); ++ j) 
    540544                                { 
    541                                         BspLeaf *leaf = ray->bspIntersections[j].mLeaf; 
    542  
    543                                         if (bspLeaves[i]->GetViewCell() == leaf->GetViewCell())  
     545                                        BspLeaf *leaf2 = ray->bspIntersections[j].mLeaf; 
     546 
     547                                        if (leaf->GetViewCell() == leaf2->GetViewCell())  
    544548                                        { 
    545                                                 vcRays[i].push_back(ray); 
     549                                                vcRays.push_back(ray); 
    546550                                        } 
    547551                                } 
    548552                        } 
    549553 
    550                         Intersectable::NewMail(); 
    551  
    552                         BspViewCell *vc = dynamic_cast<BspViewCell *>(bspLeaves[i]->GetViewCell()); 
     554            Intersectable::NewMail(); 
     555 
     556                        BspViewCell *vc = dynamic_cast<BspViewCell *>(leaf->GetViewCell()); 
    553557 
    554558                        //bspLeaves[j]->Mail(); 
     
    558562                        exporter->SetFilled(); 
    559563 
    560                         ViewCellPvsMap::iterator it = vc->GetPvs().mEntries.begin(); 
    561  
    562564                        exporter->SetWireframe(); 
    563565                        //exporter->SetFilled(); 
    564566 
    565567                        Material m;//= RandomMaterial(); 
    566                         m.mDiffuseColor = RgbColor(0, 1, 0); 
     568                        m.mDiffuseColor = RgbColor(1, 1, 0); 
    567569                        exporter->SetForcedMaterial(m); 
    568570 
     
    571573                        else 
    572574                        { 
    573                                 PolygonContainer cell; 
     575                                PolygonContainer vcGeom; 
    574576                                // export view cell geometry 
    575                                 mBspTree->ConstructGeometry(vc, cell); 
    576                                 exporter->ExportPolygons(cell); 
    577                                 CLEAR_CONTAINER(cell); 
     577                                mBspTree->ConstructGeometry(vc, vcGeom); 
     578                                exporter->ExportPolygons(vcGeom); 
     579                                CLEAR_CONTAINER(vcGeom); 
    578580                        } 
    579581 
    580582                        Debug << i << ": pvs size=" << (int)vc->GetPvs().GetSize()  
    581                                         << ", piercing rays=" << (int)vcRays[i].size() << endl; 
     583                                  << ", piercing rays=" << (int)vcRays.size() << endl; 
    582584 
    583585                        // export rays piercing this view cell 
    584                         exporter->ExportRays(vcRays[i], 1000, RgbColor(0, 1, 0)); 
    585  
     586                        exporter->ExportRays(vcRays, 1000, RgbColor(0, 1, 0));   
     587                         
    586588                        m.mDiffuseColor = RgbColor(1, 0, 0); 
    587589                        exporter->SetForcedMaterial(m); 
     
    590592                        exporter->SetFilled(); 
    591593 
     594                        ViewCellPvsMap::iterator it, it_end = vc->GetPvs().mEntries.end(); 
    592595                        // output PVS of view cell 
    593                         for (; it != vc->GetPvs().mEntries.end(); ++ it)  
     596                        for (it = vc->GetPvs().mEntries.begin(); it !=  it_end; ++ it)  
    594597                        { 
    595598                                Intersectable *intersect = (*it).first; 
     
    600603                                }                        
    601604                        } 
    602                                  
    603                         // output rest of the objects 
    604                         if (0) 
    605                         { 
    606                                 Material m;//= RandomMaterial(); 
    607                                 m.mDiffuseColor = RgbColor(0, 0, 1); 
    608                                 exporter->SetForcedMaterial(m); 
    609  
    610                                 for (int j = 0; j < objects.size(); ++ j) 
    611                                         if (!objects[j]->Mailed()) 
    612                                         { 
    613                                                 exporter->SetForcedMaterial(m); 
    614                                                 exporter->ExportIntersectable(objects[j]); 
    615                                                 objects[j]->Mail(); 
    616                                         } 
    617                         } 
     605 
    618606                        DEL_PTR(exporter); 
    619607                        cout << "finished" << endl; 
     
    623611        { 
    624612                ViewCellContainer viewCells; 
     613                RayContainer vcRays; 
    625614 
    626615                mBspTree->CollectViewCells(viewCells); 
     
    648637                                        if (vc == leaf->GetViewCell())  
    649638                                        { 
    650                                                 vcRays[i].push_back(ray); 
     639                                                vcRays.push_back(ray); 
    651640                                        } 
    652641                                } 
     
    677666                         
    678667                        Debug << i << ": pvs size=" << (int)vc->GetPvs().GetSize()  
    679                                         << ", piercing rays=" << (int)vcRays[i].size() << endl; 
     668                                  << ", piercing rays=" << (int)vcRays.size() << endl; 
    680669 
    681670                         
    682671                        // export rays piercing this view cell 
    683                         exporter->ExportRays(vcRays[i], 1000, RgbColor(0, 1, 0)); 
     672                        exporter->ExportRays(vcRays, 1000, RgbColor(0, 1, 0)); 
    684673         
    685674                        m.mDiffuseColor = RgbColor(1, 0, 0); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellsManager.h

    r442 r444  
    153153        */ 
    154154        virtual bool ViewCellsConstructed() const = 0; 
    155          
    156          
     155                 
    157156 
    158157protected: 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VspBspTree.cpp

    r443 r444  
    517517                 (data.mPvs <= mTermMinPvs) || 
    518518                 (data.mArea <= mTermMinArea) || 
    519                  (data.mDepth >= mTermMaxDepth) || 
    520                  (data.GetAvgRayContribution() < mTermMaxRayContribution)); 
     519                 (data.GetAvgRayContribution() >= mTermMaxRayContribution) || 
     520                 (data.mDepth >= mTermMaxDepth)); 
    521521} 
    522522 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VssRay.h

    r441 r444  
    6868        mOriginObject(ray.sourceObject.mObject), 
    6969        mT(1.0f) 
    70   { 
    71         if (ray.sourceObject.mObject) 
    72           mOrigin = ray.Extrap(ray.sourceObject.mT); 
    73         else 
    74           mOrigin = ray.GetLoc();  
    75  
    76         //Debug << "origin: " << mOrigin << endl; 
    77  
    78         if (!ray.intersections.empty()) 
    7970        { 
    80                 mTermination = ray.Extrap(ray.intersections[0].mT); 
    81                 mTerminationObject = ray.intersections[0].mObject; 
    82         } 
    83         else 
    84         { 
    85                 mTermination = ray.Extrap(1e6);//TODO: should be Limits::Infinity 
    86                 mTerminationObject = NULL; 
    87         } 
    88  
    89         Precompute(); 
     71                if (ray.sourceObject.mObject) 
     72                        mOrigin = ray.Extrap(ray.sourceObject.mT); 
     73                else 
     74                        mOrigin = ray.GetLoc();  
     75 
     76                //Debug << "origin: " << mOrigin << endl; 
     77                if (!ray.intersections.empty()) 
     78                { 
     79                        mTermination = ray.Extrap(ray.intersections[0].mT); 
     80                        mTerminationObject = ray.intersections[0].mObject; 
     81                } 
     82                else 
     83                { 
     84                        mTermination = ray.Extrap(1e6);//TODO: should be Limits::Infinity 
     85                        mTerminationObject = NULL; 
     86                } 
     87 
     88                Precompute(); 
    9089  } 
    9190 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VssTree.h

    r438 r444  
    432432 
    433433  virtual void Print(ostream &s) const { 
    434     s<<endl<<"L: r="<<rays.size()<<endl; 
     434    s<<endl<<"L: r="<<(int)rays.size()<<endl; 
    435435  }; 
    436436   
  • trunk/VUT/GtpVisibilityPreprocessor/src/X3dExporter.cpp

    r440 r444  
    8080bool 
    8181X3dExporter::ExportRays(const RayContainer &rays, 
    82                                                                                                 const float length, 
    83                                                                                                 const RgbColor &color) 
     82                                                const float length, 
     83                                                const RgbColor &color) 
    8484{ 
    8585  RayContainer::const_iterator ri = rays.begin(); 
     
    130130bool 
    131131X3dExporter::ExportRays(const VssRayContainer &rays, 
    132                                                                                                 const RgbColor &color) 
     132                                                const RgbColor &color) 
    133133{ 
    134134  VssRayContainer::const_iterator ri = rays.begin(); 
     
    154154  ri = rays.begin(); 
    155155  for (; ri != rays.end(); ri++) { 
    156     Vector3 a = (*ri)->GetOrigin(); 
    157                 Vector3 b = (*ri)->mTerminationObject ? (*ri)->GetTermination() : a + 1000 * Normalize(b - a); 
     156    const Vector3 a = (*ri)->GetOrigin(); 
     157        const Vector3 b = (*ri)->mTerminationObject ? (*ri)->GetTermination() : a + 1000 * Normalize((*ri)->GetDir()); 
    158158         
    159159    stream<<a.x<<" "<<a.y<<" "<<a.z<<" ,"; 
    160                 stream<<b.x<<" "<<b.y<<" "<<b.z<<" ,\n"; 
     160        stream<<b.x<<" "<<b.y<<" "<<b.z<<" ,\n"; 
    161161  } 
    162162   
Note: See TracChangeset for help on using the changeset viewer.