source: GTP/trunk/Lib/Vis/Preprocessing/src/CombinedPreprocessor.cpp @ 2002

Revision 2002, 3.8 KB checked in by bittner, 17 years ago (diff)

renderer code updates for pixel error measurements

  • Property svn:executable set to *
Line 
1#include "SceneGraph.h"
2#include "KdTree.h"
3#include "X3dExporter.h"
4#include "Environment.h"
5#include "Polygon3.h"
6#include "VssRay.h"
7#include "RssTree.h"
8#include "ViewCellsManager.h"
9#include "RenderSimulator.h"
10#include "GlRenderer.h"
11#include "SamplingStrategy.h"
12#include "PreprocessorThread.h"
13#include "CombinedPreprocessor.h"
14
15
16namespace GtpVisibilityPreprocessor {
17
18const bool pruneInvalidRays = true;
19
20 
21  CombinedPreprocessor::CombinedPreprocessor():
22        Preprocessor()
23  {
24        // this should increase coherence of the samples
25//      Environment::GetSingleton()->GetIntValue("RssPreprocessor.vssSamples", mTotalSamples);
26//      Environment::GetSingleton()->GetIntValue("RssPreprocessor.samplesPerPass", mSamplesPerPass);
27//      Environment::GetSingleton()->GetIntValue("RssPreprocessor.vssSamplesPerPass",
28//                                                                                       mSamplesPerEvaluation);
29       
30       
31  }
32 
33
34bool
35CombinedPreprocessor::ComputeVisibility()
36{
37 
38  Debug << "Preprocessor type: combined" << endl;
39  cout<<"Combined Preprocessor started\n"<<flush;
40 
41  // if not already loaded, construct view cells from file
42  if (!mLoadViewCells) {
43        // construct view cells using it's own set of samples
44        mViewCellsManager->Construct(this);
45       
46        //-- several visualizations and statistics
47        Debug << "view cells construction finished: " << endl;
48        mViewCellsManager->PrintStatistics(Debug);
49  }
50 
51 
52  // now decode distribution string
53  char buff[1024];
54  Environment::GetSingleton()->GetStringValue("RssPreprocessor.distributions",
55                                                                                          buff);
56 
57 
58  mMixtureDistribution = new MixtureDistribution(*this);
59  mMixtureDistribution->Construct(buff);
60 
61  SimpleRayContainer rays;
62  VssRayContainer vssRays;
63
64  int lastEvaluation = 0;
65  int totalVssRays = 0;
66  mPass = 0;
67 
68
69 
70  bool mExportAnimation = false;
71  vector<VssRayContainer> rayBuffer;
72 
73
74  long startTime = GetTime();
75  for (int i=0; i < mTotalSamples; i += mSamplesPerPass, mPass++) {
76
77        cout<<"Progress : "<<(100.0f*i)/mTotalSamples<<"%"<<endl;
78        rays.clear();
79        vssRays.clear();
80       
81        mMixtureDistribution->GenerateSamples(mSamplesPerPass, rays);
82
83        bool doubleRays = true;
84        CastRays(rays, vssRays, doubleRays, pruneInvalidRays);
85        totalVssRays += (int)vssRays.size();
86
87        mMixtureDistribution->ComputeContributions(vssRays);
88
89        if (mExportRays) {
90          Debug<<"Exporting rays..."<<endl<<flush;
91          char filename[256];
92
93          VssRayContainer contributingRays;
94          vssRays.GetContributingRays(contributingRays, 0);
95          sprintf(filename, "rss-crays-%04d.x3d", mPass);
96          ExportRays(filename, contributingRays, mExportNumRays);
97
98          sprintf(filename, "rss-rays-i%04d.x3d", mPass);
99          ExportRays(filename, vssRays, mExportNumRays);
100
101
102          if (mExportAnimation) {
103                rayBuffer.push_back(VssRayContainer());
104                vssRays.SelectRays(mExportNumRays, rayBuffer[rayBuffer.size()-1], true);
105          }
106
107          Debug<<"done."<<endl<<flush;
108        }
109
110        mMixtureDistribution->UpdateDistributions(vssRays);
111       
112        if (i - lastEvaluation >= mSamplesPerEvaluation) {
113          mViewCellsManager->PrintPvsStatistics(mStats);
114          mStats <<
115                "#Pass\n" <<mPass<<endl<<
116                "#Time\n" << TimeDiff(startTime, GetTime())<<endl<<
117                "#TotalSamples\n" <<i<<endl<<
118                "#RssSamples\n" <<totalVssRays<<endl;
119          lastEvaluation = i;
120
121          if (renderer) {
122                ComputeRenderError();
123          }
124         
125        }
126
127        cerr<<"deleting rays"<<endl;
128        //clear all unreferenced rays
129        for (int j=0; j < vssRays.size(); j++) {
130          if (vssRays[j]->RefCount() == 0)
131                delete vssRays[j];
132        }
133        cerr<<"done."<<endl;
134         
135       
136        //      if (!mMixtureDistribution->RequiresRays())
137        //        CLEAR_CONTAINER(vssRays);
138
139       
140  }
141 
142  EvalViewCellHistogram();
143
144  if (mExportAnimation && mExportRays) {
145        char filename[64];
146        sprintf(filename, "rss-rays-i.x3d");
147        //rayBuffer.resize(mPass);
148        ExportRayAnimation(filename, rayBuffer);
149  }
150
151  return true;
152}
153
154}
Note: See TracBrowser for help on using the repository browser.