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

Revision 1287, 3.1 KB checked in by mattausch, 18 years ago (diff)

implemented bv hierarchy

Line 
1#include "X3dExporter.h"
2#include "VrmlExporter.h"
3#include "OspTree.h"
4#include "KdTree.h"
5#include "KdIntersectable.h"
6#include "BvHierarchy.h"
7
8
9namespace GtpVisibilityPreprocessor {
10
11Exporter *
12Exporter::GetExporter(const string filename)
13{
14  Exporter *exporter = NULL;
15
16  if (strstr(filename.c_str(), ".x3d"))
17  {
18          exporter = new X3dExporter(filename);
19  }
20  else if (strstr(filename.c_str(), ".wrl"))
21  {
22          exporter = new VrmlExporter(filename);
23  }
24  else
25  {
26          cerr<<"Error: Currently unsuported export format, filename " << filename << endl;
27  }
28
29  return exporter;
30}
31
32
33bool Exporter::ExportOspTree(const OspTree &ospTree, const int maxPvs)
34{
35        vector<KdLeaf *> leaves;
36        ospTree.CollectLeaves(leaves);
37
38        mUseForcedMaterial = true;
39
40        vector<KdLeaf *>::const_iterator it, it_end = leaves.end();
41
42        Material white;
43        white.mDiffuseColor.r = 1;
44        white.mDiffuseColor.g = 1;
45        white.mDiffuseColor.b = 1;
46       
47        for (it = leaves.begin(); it != it_end; ++ it)
48        {
49                KdLeaf *leaf = *it;
50
51                SetWireframe();
52                SetForcedMaterial(white);
53                ExportBox(ospTree.GetBoundingBox(leaf));
54
55                SetFilled();
56
57                if (maxPvs) // color code pvs
58                {
59                        mForcedMaterial.mDiffuseColor.b = 1.0f;
60                        const float importance = (float)leaf->mObjects.size() / (float)maxPvs;
61
62                        mForcedMaterial.mDiffuseColor.r = importance;
63                        mForcedMaterial.mDiffuseColor.g = 1.0f - mForcedMaterial.mDiffuseColor.r;
64                }
65                else
66                {
67                        SetForcedMaterial(RandomMaterial());
68                }
69
70                if (0) ExportGeometry(leaf->mObjects); 
71        }
72
73        return true;
74}
75
76
77void Exporter::ExportKdIntersectable(const KdIntersectable &kdObj)
78{
79        KdNode *node = kdObj.GetItem();
80       
81        Intersectable::NewMail();
82
83        // todo: traverse to leaves
84        if (node->IsLeaf())
85        {
86                // eyport leaf pvs
87                KdLeaf *leaf = dynamic_cast<KdLeaf *>(node);
88
89                ObjectContainer::const_iterator oit, oit_end = leaf->mObjects.end();
90
91                for (oit = leaf->mObjects.begin(); oit != oit_end; ++ oit)
92                {       
93                        Intersectable *obj = *oit;
94       
95                        if (!obj->Mailed())
96                        {
97                                ExportIntersectable(obj);
98                                obj->Mail();                                   
99                        }                               
100                }
101        }
102}
103
104
105bool Exporter::ExportBvHierarchy(const BvHierarchy &bvHierarchy,
106                                                                 const int maxPvs)
107{
108        vector<BvhLeaf *> leaves;
109        bvHierarchy.CollectLeaves(leaves);
110
111        mUseForcedMaterial = true;
112
113        vector<BvhLeaf *>::const_iterator it, it_end = leaves.end();
114
115        Material white;
116        white.mDiffuseColor.r = 1;
117        white.mDiffuseColor.g = 1;
118        white.mDiffuseColor.b = 1;
119        int objSize = 0;
120
121        for (it = leaves.begin(); it != it_end; ++ it)
122        {
123                BvhLeaf *leaf = *it;
124
125                SetWireframe();
126                SetForcedMaterial(white);
127                ExportBox(leaf->GetBoundingBox());
128               
129                SetFilled();
130
131                if (maxPvs) // color code pvs
132                {
133                        mForcedMaterial.mDiffuseColor.b = 1.0f;
134                        const float importance = (float)leaf->mObjects.size() / (float)maxPvs;
135
136                        mForcedMaterial.mDiffuseColor.r = importance;
137                        mForcedMaterial.mDiffuseColor.g = 1.0f - mForcedMaterial.mDiffuseColor.r;
138                }
139                else
140                {
141                        SetForcedMaterial(RandomMaterial());
142                }
143
144                if (1)
145                {
146                        SetFilled();
147                        ExportGeometry(leaf->mObjects);
148                        objSize += leaf->mObjects.size();
149                }
150        }
151
152        return true;
153}
154
155
156}
Note: See TracBrowser for help on using the repository browser.