Changeset 537


Ignore:
Timestamp:
01/13/06 19:20:27 (18 years ago)
Author:
bittner
Message:

ray probability density support

Location:
trunk/VUT/GtpVisibilityPreprocessor/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/src/Ray.h

    r534 r537  
    307307 
    308308  SimpleRay() {} 
    309   SimpleRay(const Vector3 &o, const Vector3 &d):mOrigin(o), mDirection(d) {} 
     309  SimpleRay(const Vector3 &o, const Vector3 &d, const float p=1.0f): 
     310        mOrigin(o), mDirection(d), mProbability(p) {} 
    310311}; 
    311312 
    312 typedef vector<SimpleRay> SimpleRayContainer; 
     313class SimpleRayContainer : public vector<SimpleRay> 
     314{ 
     315public: 
     316   
     317  float mSumProbabilities; 
     318   
     319  SimpleRayContainer():vector<SimpleRay>(), mSumProbabilities(0.0f) {} 
     320   
     321  void NormalizeProbabilities() { 
     322        iterator it = begin(); 
     323        float c = 1.0f/mSumProbabilities; 
     324        for (; it != end(); it++) 
     325          (*it).mProbability*=c; 
     326  } 
     327   
     328}; 
    313329 
    314330#endif  
  • trunk/VUT/GtpVisibilityPreprocessor/src/RssPreprocessor.cpp

    r534 r537  
    6868                                                 Vector3 &viewPoint, 
    6969                                                 Vector3 &direction, 
     70                                                 const float probability, 
    7071                                                 VssRayContainer &vssRays 
    7172                                                 ) 
     
    148149                                                  objectB, 
    149150                                                  objectA, 
    150                                                   mPass 
     151                                                  mPass, 
     152                                                  probability 
    151153                                                  ); 
    152154          vssRays.push_back(vssRay); 
     
    159161                                                  objectA, 
    160162                                                  objectB, 
    161                                                   mPass 
     163                                                  mPass, 
     164                                                  probability 
    162165                                                  ); 
    163166          vssRays.push_back(vssRay); 
     
    551554          //int s = Min(mSamplesPerPass, mInitialSamples); 
    552555          int s = mInitialSamples; 
    553            
     556 
     557          float probability = 1.0f/mInitialSamples; 
    554558          for (int k=0; k < s; k++) { 
    555559                 
     
    561565                Vector3 direction = InitialGetDirection(viewpoint, mViewSpaceBox); 
    562566                 
    563                 sampleContributions = CastRay(viewpoint, direction, mVssRays); 
     567                sampleContributions = CastRay(viewpoint, direction, probability, mVssRays); 
    564568                 
    565569                 
     
    694698                mViewCellsManager->GetViewPoint(viewpoint); 
    695699                Vector3 direction = GetDirection(viewpoint, mViewSpaceBox); 
    696                 rays.push_back(SimpleRay(viewpoint, direction)); 
     700                rays.push_back(SimpleRay(viewpoint, direction, 1.0f)); 
     701                rays.mSumProbabilities+=1.0f; 
    697702          } 
    698703        } else { 
    699704          num = GenerateImportanceRays(rssTree, num, rays); 
    700705        } 
    701                  
    702                  
     706 
     707        rays.NormalizeProbabilities(); 
     708         
    703709        for (int i=0; i < rays.size(); i++) 
    704           CastRay(rays[i].mOrigin, rays[i].mDirection, vssRays); 
     710          CastRay(rays[i].mOrigin, rays[i].mDirection, rays[i].mProbability, vssRays); 
    705711 
    706712         
  • trunk/VUT/GtpVisibilityPreprocessor/src/RssPreprocessor.h

    r492 r537  
    7878                  Vector3 &viewPoint, 
    7979                  Vector3 &direction, 
     80                  const float probability, 
    8081                  VssRayContainer &vssRays 
    8182 
  • trunk/VUT/GtpVisibilityPreprocessor/src/RssTree.cpp

    r534 r537  
    21952195  //  cout<<"desired="<<numberOfRays<<" tries="<<i<<endl; 
    21962196  // assign probabilitites to the generated rays 
    2197   for (i=startIndex; i < rays.size(); i++) 
    2198         rays[i].mProbability = 1.0f; 
    2199            
     2197  float p = (box.GetVolume()*dirBox.GetVolume())/generated; 
     2198  for (i=startIndex; i < rays.size(); i++) { 
     2199        rays[i].mProbability = p; 
     2200        rays.mSumProbabilities += p; 
     2201  } 
     2202   
     2203   
    22002204  if (exporter) { 
    22012205        exporter->ExportRays(selectedRays, RgbColor(1, 0, 0)); 
  • trunk/VUT/GtpVisibilityPreprocessor/src/VssRay.h

    r534 r537  
    7373                 Intersectable *originObject, 
    7474                 Intersectable *terminationObject, 
    75                  const int pass = 0 
     75                 const int pass = 0, 
     76                 const float probability = 1.0f 
    7677                 ): 
    7778        mMailbox(-1), 
     
    8586        mViewCells(0), 
    8687        mWeightedPvsContribution(0), 
    87         mProbability(1.0f) 
     88        mProbability(probability) 
    8889  { 
    8990    Precompute(); 
Note: See TracChangeset for help on using the changeset viewer.