#include "X3dExporter.h" #include "VrmlExporter.h" #include "VspOspTree.h" #include "KdTree.h" namespace GtpVisibilityPreprocessor { Exporter * Exporter::GetExporter(const string filename) { Exporter *exporter = NULL; if (strstr(filename.c_str(), ".x3d")) { exporter = new X3dExporter(filename); } else if (strstr(filename.c_str(), ".wrl")) { exporter = new VrmlExporter(filename); } else { cerr<<"Error: Currently unsuported export format, filename " << filename << endl; } return exporter; } bool Exporter::ExportOspTree(const OspTree &ospTree, const int maxPvs) { vector leaves; ospTree.CollectLeaves(leaves); mUseForcedMaterial = true; vector::const_iterator it, it_end = leaves.end(); Material white; white.mDiffuseColor.r = 1; white.mDiffuseColor.g = 1; white.mDiffuseColor.b = 1; for (it = leaves.begin(); it != it_end; ++ it) { KdLeaf *leaf = *it; SetWireframe(); SetForcedMaterial(white); ExportBox(ospTree.GetBBox(leaf)); SetFilled(); if (maxPvs) // color code pvs { mForcedMaterial.mDiffuseColor.b = 1.0f; const float importance = (float)ospTree.ComputePvsSize(leaf->mObjects) / (float)maxPvs; mForcedMaterial.mDiffuseColor.r = importance; mForcedMaterial.mDiffuseColor.g = 1.0f - mForcedMaterial.mDiffuseColor.r; } else { SetForcedMaterial(RandomMaterial()); } ExportGeometry(leaf->mObjects); } return true; } }