#include "SceneGraph.h" #include "KdTree.h" #include "X3dExporter.h" #include "Environment.h" #include "Polygon3.h" #include "VssRay.h" #include "RssTree.h" #include "ViewCellsManager.h" #include "RenderSimulator.h" #include "GlRenderer.h" #include "SamplingStrategy.h" #include "PreprocessorThread.h" #include "CombinedPreprocessor.h" namespace GtpVisibilityPreprocessor { const bool pruneInvalidRays = false; CombinedPreprocessor::CombinedPreprocessor(): Preprocessor() { // this should increase coherence of the samples Environment::GetSingleton()->GetIntValue("RssPreprocessor.vssSamples", mTotalSamples); Environment::GetSingleton()->GetIntValue("RssPreprocessor.samplesPerPass", mSamplesPerPass); Environment::GetSingleton()->GetIntValue("RssPreprocessor.vssSamplesPerPass", mSamplesPerEvaluation); // Environment::GetSingleton()->GetBoolValue("RssPreprocessor.Export.rays", mExportRays); // Environment::GetSingleton()->GetIntValue("RssPreprocessor.Export.numRays", mExportNumRays); } bool CombinedPreprocessor::ComputeVisibility() { Debug << "Preprocessor type: combined" << endl; cout<<"Combined Preprocessor started\n"<Construct(this); //-- several visualizations and statistics Debug << "view cells construction finished: " << endl; mViewCellsManager->PrintStatistics(Debug); } // now decode distribution string char buff[1024]; Environment::GetSingleton()->GetStringValue("RssPreprocessor.distributions", buff); mMixtureDistribution = new MixtureDistribution(*this); mMixtureDistribution->Construct(buff); SimpleRayContainer rays; VssRayContainer vssRays; int lastEvaluation = 0; int totalVssRays = 0; mPass = 0; long startTime = GetTime(); for (int i=0; i < mTotalSamples; i += mSamplesPerPass, mPass++) { if (i - lastEvaluation >= mSamplesPerEvaluation) { mStats << "#Pass\n" <PrintPvsStatistics(mStats); lastEvaluation = i; } cout<<"Progress : "<<(100.0f*i)/mTotalSamples<<"%"<GenerateSamples(mSamplesPerPass, rays); CastRays(rays, vssRays, true, pruneInvalidRays); totalVssRays += (int)vssRays.size(); mMixtureDistribution->ComputeContributions(vssRays); } return true; } }