source: GTP/trunk/Lib/Vis/Preprocessing/src/Exporter.cpp @ 1144

Revision 1144, 2.1 KB checked in by mattausch, 18 years ago (diff)
Line 
1#include "X3dExporter.h"
2#include "VrmlExporter.h"
3#include "VspOspTree.h"
4#include "KdTree.h"
5#include "KdIntersectable.h"
6
7
8namespace GtpVisibilityPreprocessor {
9
10Exporter *
11Exporter::GetExporter(const string filename)
12{
13  Exporter *exporter = NULL;
14
15  if (strstr(filename.c_str(), ".x3d"))
16  {
17          exporter = new X3dExporter(filename);
18  }
19  else if (strstr(filename.c_str(), ".wrl"))
20  {
21          exporter = new VrmlExporter(filename);
22  }
23  else
24  {
25          cerr<<"Error: Currently unsuported export format, filename " << filename << endl;
26  }
27
28  return exporter;
29}
30
31
32bool Exporter::ExportOspTree(const OspTree &ospTree, const int maxPvs)
33{
34        vector<KdLeaf *> leaves;
35        ospTree.CollectLeaves(leaves);
36
37        mUseForcedMaterial = true;
38
39        vector<KdLeaf *>::const_iterator it, it_end = leaves.end();
40
41        Material white;
42        white.mDiffuseColor.r = 1;
43        white.mDiffuseColor.g = 1;
44        white.mDiffuseColor.b = 1;
45       
46        for (it = leaves.begin(); it != it_end; ++ it)
47        {
48                KdLeaf *leaf = *it;
49
50                SetWireframe();
51                SetForcedMaterial(white);
52                ExportBox(ospTree.GetBoundingBox(leaf));
53
54                SetFilled();
55
56                if (maxPvs) // color code pvs
57                {
58                        mForcedMaterial.mDiffuseColor.b = 1.0f;
59                        const float importance = (float)ospTree.ComputePvsSize(leaf->mObjects) / (float)maxPvs;
60
61                        mForcedMaterial.mDiffuseColor.r = importance;
62                        mForcedMaterial.mDiffuseColor.g = 1.0f - mForcedMaterial.mDiffuseColor.r;
63                }
64                else
65                {
66                        SetForcedMaterial(RandomMaterial());
67                }
68
69                ExportGeometry(leaf->mObjects);
70        }
71
72        return true;
73}
74
75void Exporter::ExportKdIntersectable(const KdIntersectable &kdObj)
76{
77        KdNode *node = kdObj.GetNode();
78       
79        Intersectable::NewMail();
80
81        // todo: traverse to leaves
82        if (node->IsLeaf())
83        {
84                // eyport leaf pvs
85                KdLeaf *leaf = dynamic_cast<KdLeaf *>(node);
86
87                ObjectContainer::const_iterator oit, oit_end = leaf->mObjects.end();
88
89                for (oit = leaf->mObjects.begin(); oit != oit_end; ++ oit)
90                {       
91                        Intersectable *obj = *oit;
92       
93                        if (!obj->Mailed())
94                        {
95                                ExportIntersectable(obj);
96                                obj->Mail();                                   
97                        }                               
98                }
99        }
100}
101
102
103}
Note: See TracBrowser for help on using the repository browser.