Ignore:
Timestamp:
12/08/06 23:46:17 (18 years ago)
Author:
bittner
Message:

halton generator updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.cpp

    r1867 r1876  
    3232 
    3333// $$JB HACK 
    34 #define USE_KD_PVS 0 
     34#define USE_KD_PVS 1 
    3535 
    3636#define KD_PVS_AREA (1e-5f) 
     
    20232023   
    20242024  ViewCellContainer viewcells; 
    2025    
    2026  
    2027  
    20282025   
    20292026  static Ray hray; 
     
    20842081                  // for directional sampling it is important to count only contributions 
    20852082                  // made in one direction!!! 
    2086                         // the other contributions of this sample will be counted for the oposite ray! 
     2083                  // the other contributions of this sample will be counted for the oposite ray! 
    20872084 
    20882085                        if (ray.mOriginObject &&  
     
    60476044 
    60486045#define PVS_ADD_DIRTY 1 
     6046 
    60496047float 
    60506048VspOspViewCellsManager::ComputeSampleContribution(VssRay &ray, 
     
    60606058  ViewCellContainer viewcells; 
    60616059   
    6062  
    6063         static Ray hray; 
    6064         hray.Init(ray); 
    6065         //hray.mFlags |= Ray::CULL_BACKFACES; 
    6066         //Ray hray(ray); 
    6067  
    6068         //      if (ray.mPdf!=1.0f) 
    6069         //        cout<<ray.mPdf<<" "; 
    6070  
    6071         float tmin = 0, tmax = 1.0; 
    6072  
    6073         if (!GetViewSpaceBox().GetRaySegment(hray, tmin, tmax) || (tmin > tmax)) 
    6074                 return 0; 
    6075  
    6076         Vector3 origin = hray.Extrap(tmin); 
    6077         Vector3 termination = hray.Extrap(tmax); 
    6078  
    6079         ViewCell::NewMail(); 
    6080  
    6081         // traverse the view space subdivision 
    6082         CastLineSegment(origin, termination, viewcells); 
    6083  
    6084         if (storeViewCells) 
     6060  static Ray hray; 
     6061  hray.Init(ray); 
     6062 
     6063  float tmin = 0, tmax = 1.0; 
     6064   
     6065  if (!GetViewSpaceBox().GetRaySegment(hray, tmin, tmax) || (tmin > tmax)) 
     6066        return 0; 
     6067   
     6068  Vector3 origin = hray.Extrap(tmin); 
     6069  Vector3 termination = hray.Extrap(tmax); 
     6070   
     6071  ViewCell::NewMail(); 
     6072   
     6073  // traverse the view space subdivision 
     6074  CastLineSegment(origin, termination, viewcells); 
     6075   
     6076  if (storeViewCells) 
    60856077        {        
    6086                 // copy viewcells memory efficiently 
    6087                 ray.mViewCells.reserve(viewcells.size()); 
    6088                 ray.mViewCells = viewcells; 
    6089         } 
    6090  
    6091         ViewCellContainer::const_iterator it = viewcells.begin(); 
    6092  
    6093         Intersectable *terminationObj = GetIntersectable(ray, true); 
    6094  
     6078          // copy viewcells memory efficiently 
     6079          ray.mViewCells.reserve(viewcells.size()); 
     6080          ray.mViewCells = viewcells; 
     6081        } 
     6082   
     6083  ViewCellContainer::const_iterator it = viewcells.begin(); 
     6084   
     6085  Intersectable *terminationObj = GetIntersectable(ray, true); 
     6086   
    60956087#if SAMPLE_ORIGIN_OBJECTS 
    6096         Intersectable *originObj = GetIntersectable(ray, false); 
     6088  Intersectable *originObj = GetIntersectable(ray, false); 
    60976089#endif 
    6098  
    6099         for (; it != viewcells.end(); ++ it)  
    6100         { 
    6101                 ViewCell *viewcell = *it; 
    6102  
    6103                 if (viewcell->GetValid()) 
     6090   
     6091  for (; it != viewcells.end(); ++ it)  
     6092        { 
     6093          ViewCell *viewcell = *it; 
     6094           
     6095          if (viewcell->GetValid()) 
    61046096                {       // if ray not outside of view space 
    6105                         float contribution; 
    6106  
    6107                         if (terminationObj)  
     6097                  float contribution; 
     6098                   
     6099                  if (terminationObj)  
    61086100                        { 
    61096101                          // todo: maybe not correct for kd node pvs 
     
    61166108                          ray.mRelativePvsContribution += contribution; 
    61176109                        } 
    6118  
    6119                         //////////////// 
    6120                         //-- for directional sampling it is important to count  
    6121                         //-- only contributions made in one direction! 
    6122                         //-- the other contributions of this sample will be counted for the opposite ray! 
    6123  
     6110                   
     6111                  //////////////// 
     6112                  //-- for directional sampling it is important to count  
     6113                  //-- only contributions made in one direction! 
     6114                  //-- the other contributions of this sample will be counted for the opposite ray! 
     6115                   
    61246116#if SAMPLE_ORIGIN_OBJECTS 
    6125  
    6126                         if (originObj &&  
    6127                                 viewcell->GetPvs().GetSampleContribution(originObj, 
    6128                                                                                                                 ray.mPdf, 
    6129                                                                                                                 contribution)) 
     6117                   
     6118                  if (originObj &&  
     6119                          viewcell->GetPvs().GetSampleContribution(originObj, 
     6120                                                                                                          ray.mPdf, 
     6121                                                                                                          contribution)) 
    61306122                        { 
    6131                                 ++ ray.mPvsContribution; 
    6132                                 ray.mRelativePvsContribution += contribution; 
     6123                          ++ ray.mPvsContribution; 
     6124                          ray.mRelativePvsContribution += contribution; 
    61336125                        } 
    61346126#endif 
    61356127                } 
    61366128        } 
    6137  
    6138         if (!addRays) 
    6139         { 
    6140                 return ray.mRelativePvsContribution; 
    6141         } 
    6142  
    6143         // sampled objects are stored in the pvs 
    6144         for (it = viewcells.begin(); it != viewcells.end(); ++ it)  
    6145         { 
    6146                 ViewCell *viewCell = *it; 
    6147  
    6148                 if (!viewCell->GetValid()) 
    6149                         break; 
    6150  
    6151                 //$$JB hack 
    6152  
     6129   
     6130  if (!addRays) { 
     6131        return ray.mRelativePvsContribution; 
     6132  } 
     6133   
     6134  // sampled objects are stored in the pvs 
     6135  for (it = viewcells.begin(); it != viewcells.end(); ++ it)  { 
     6136        ViewCell *viewCell = *it; 
     6137         
     6138        if (!viewCell->GetValid()) 
     6139          break; 
     6140         
     6141        //$$JB hack 
     6142         
    61536143#if PVS_ADD_DIRTY 
    6154                 viewCell->GetPvs().AddSampleDirtyCheck(terminationObj, ray.mPdf); 
     6144        viewCell->GetPvs().AddSampleDirtyCheck(terminationObj, ray.mPdf); 
    61556145#else 
    6156                 viewCell->GetPvs().AddSample(terminationObj, ray.mPdf); 
     6146        viewCell->GetPvs().AddSample(terminationObj, ray.mPdf); 
    61576147#endif 
    6158  
     6148         
    61596149#if SAMPLE_ORIGIN_OBJECTS 
    61606150#if PVS_ADD_DIRTY 
    6161                 viewCell->GetPvs().AddSampleDirtyCheck(originObj, ray.mPdf); 
     6151        viewCell->GetPvs().AddSampleDirtyCheck(originObj, ray.mPdf); 
    61626152#else 
    6163                 viewCell->GetPvs().AddSample(originObj, ray.mPdf); 
     6153        viewCell->GetPvs().AddSample(originObj, ray.mPdf); 
    61646154#endif 
    61656155#endif 
    6166                 if (viewCell->GetPvs().RequiresResort()) 
    6167                 { 
    6168                         viewCell->GetPvs().Sort();                       
    6169                 } 
    6170         } 
    6171  
    6172         return ABS_CONTRIBUTION_WEIGHT*ray.mPvsContribution + 
    6173                 (1.0f - ABS_CONTRIBUTION_WEIGHT)*ray.mRelativePvsContribution; 
     6156        if (viewCell->GetPvs().RequiresResort()) { 
     6157          viewCell->GetPvs().Sort();                     
     6158        } 
     6159  } 
     6160   
     6161  return ABS_CONTRIBUTION_WEIGHT*ray.mPvsContribution + 
     6162        (1.0f - ABS_CONTRIBUTION_WEIGHT)*ray.mRelativePvsContribution; 
    61746163} 
    61756164 
Note: See TracChangeset for help on using the changeset viewer.