Ignore:
Timestamp:
01/24/06 10:06:58 (18 years ago)
Author:
mattausch
Message:

implemented functtion for view cell construction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellsManager.cpp

    r572 r573  
    8888 
    8989 
     90int ViewCellsManager::CastPassSamples(int samplesPerPass,  
     91                                                                          int sampleType,  
     92                                                                          VssRayContainer *outRays) const 
     93{ 
     94        VssRayContainer passSamples; 
     95        SimpleRayContainer simpleRays; 
     96 
     97        preprocessor->GenerateRays(samplesPerPass, 
     98                                                           sampleType, 
     99                                                           simpleRays); 
     100 
     101        // shoot simple ray and add it to importance samples 
     102        preprocessor->CastRays(simpleRays, passSamples); 
     103 
     104        const int numSamples = (int)passSamples.size(); 
     105 
     106        if (outRays) 
     107        { 
     108                while (!passSamples.empty()) 
     109                        outRays->push_back(passSamples.back()); 
     110        } 
     111        else 
     112        { 
     113                CLEAR_CONTAINER(passSamples); 
     114        } 
     115 
     116        return numSamples; 
     117} 
     118 
     119 
    90120int ViewCellsManager::Construct(Preprocessor *preprocessor, VssRayContainer *outRays) 
    91121{ 
     122        int numSamples = 0; 
    92123        SimpleRayContainer simpleRays; 
    93         VssRayContainer constructionRays; 
    94  
    95         preprocessor->GenerateRays(mConstructionSamples, 
    96                                                            Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION, 
    97                                                            simpleRays); 
    98  
    99         Construct(preprocessor->mObjects, constructionRays); 
    100  
    101         int numRays = (int)simpleRays.size(); 
    102  
    103         static Ray traversalRay; 
    104  
    105         // shoot simple ray and add it to construction rays 
    106         while (!simpleRays.empty()) 
    107         { 
    108                 SimpleRay sray = simpleRays.back(); 
    109  
    110                 // TODO: shoot into kdtree 
    111                 constructionRays.push_back(new VssRay(traversalRay)); 
    112  
    113                 if (outRays) 
    114                         outRays->push_back(constructionRays.back()); 
    115  
    116                 simpleRays.pop_back(); 
    117         } 
    118  
    119         if (!outRays) 
    120                 CLEAR_CONTAINER(constructionRays); 
    121  
    122         // guided rays 
    123         VssRayContainer importanceRays; 
    124         const int desiredImportanceRays = max(1000000, mPostProcessSamples); 
    125         preprocessor->GenerateRays(desiredImportanceRays, 
    126                                                            Preprocessor::RSS_BASED_DISTRIBUTION, 
    127                                                            simpleRays); 
    128  
    129         numRays += (int)simpleRays.size(); 
    130  
    131         // shoot simple ray and add it to construction rays 
    132         while (!simpleRays.empty()) 
    133         { 
    134                 SimpleRay sray = simpleRays.back(); 
    135  
    136                 // TODO: shoot into kdtree 
    137                 importanceRays.push_back(new VssRay(traversalRay)); 
    138  
    139                 if (outRays) 
    140                         outRays->push_back(importanceRays.back()); 
    141  
    142                 simpleRays.pop_back(); 
    143         } 
    144  
    145         if (!outRays) 
    146                 CLEAR_CONTAINER(importanceRays); 
    147  
     124         
     125        VssRayContainer constructionSamples; 
     126 
     127        //-- construction rays => we use uniform samples for this 
     128        CastPassSamples(mConstructionSamples,  
     129                                        Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION,  
     130                                        &constructionSamples); 
     131         
     132        // construct view cells 
     133        const int initialSamples = Construct(preprocessor->mObjects, constructionSamples); 
     134 
     135        numSamples += initialSamples; 
     136 
     137        if (outRays) 
     138        { 
     139                while (!constructionSamples.empty()) 
     140                        outRays->push_back(constructionSamples.back()); 
     141        } 
     142        else 
     143        { 
     144                CLEAR_CONTAINER(constructionSamples); 
     145        } 
     146 
     147 
     148        //-- guided rays are used for further sampling 
     149        const int desiredImportanceSamples = 5000000; 
     150        const int importanceRayPerPass = 1000000; 
     151 
     152        const int n = desiredImportanceSamples; //+initialSamples; 
     153 
     154        while (numSamples < n) 
     155        { 
     156                numSamples += CastPassSamples(importanceRayPerPass,  
     157                                                                          Preprocessor::RSS_BASED_DISTRIBUTION,  
     158                                                                          //Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION, 
     159                                                                          outRays); 
     160        } 
     161         
     162 
     163        //-- post processing 
     164        VssRayContainer postProcessSamples; 
     165 
     166        //-- construction rays => we use uniform samples for this 
     167        CastPassSamples(max(mPostProcessSamples, mVisualizationSamples), 
     168                                    Preprocessor::SPATIAL_BOX_BASED_DISTRIBUTION,  
     169                                        &postProcessSamples); 
     170         
    148171        // merge the view cells 
    149         PostProcess(preprocessor->mObjects, importanceRays); 
    150  
    151         Visualize(preprocessor->mObjects, importanceRays); 
    152  
    153  
    154         return numRays; 
     172        PostProcess(preprocessor->mObjects, postProcessSamples); 
     173        // several visualizations 
     174        Visualize(preprocessor->mObjects, postProcessSamples); 
     175 
     176        if (outRays) 
     177        { 
     178                while (!postProcessSamples.empty()) 
     179                        outRays->push_back(postProcessSamples.back()); 
     180        } 
     181        else 
     182        { 
     183                CLEAR_CONTAINER(postProcessSamples); 
     184        } 
     185 
     186        return numSamples; 
    155187} 
    156188 
Note: See TracChangeset for help on using the changeset viewer.