source: GTP/trunk/Lib/Vis/Preprocessing/src/ViewCellsManager.h @ 735

Revision 735, 23.1 KB checked in by mattausch, 18 years ago (diff)

added histogram functionality

Line 
1#ifndef _ViewCellsManager_H__
2#define _ViewCellsManager_H__
3
4#include "Ray.h"
5#include "VssRay.h"
6#include "Containers.h"
7#include "ViewCell.h"
8#include "ViewCellBsp.h"
9
10class ViewCell;
11class Intersectable;
12class RenderSimulator;
13class Renderer;
14class Mesh;
15struct Triangle3;
16class SimulationStatistics;
17class BspTree;
18class KdTree;
19class VspKdTree;
20class VspBspTree;
21class KdNode;
22class KdLeaf;
23class VspKdTree;
24class AxisAlignedBox3;
25class BspLeaf;
26class ViewCellsStatistics;
27class Exporter;
28class Beam;
29class Preprocessor;
30class ViewCellsTree;
31class MergeCandidate;
32
33struct BspRay;
34
35
36/** Probably Visible Set */
37class PrVs
38{
39public:
40  /// root of view cells tree
41  ViewCell *mViewCell;
42
43  //ViewCellContainer mViewCells;
44  /// aggregated pvs
45  //ObjectPvs mPvs;
46
47  // input parameter is the render budget for the PrVS
48  float mRenderBudget;
49
50  /// some characteristic values could be here
51 
52};
53
54/**
55        Manages different higher order operations on the view cells.
56*/
57class ViewCellsManager
58{
59public:
60        struct PvsStatistics
61        {
62                int minPvs;
63                int maxPvs;
64                float avgPvs;
65                int viewcells;
66  };
67
68        /// view cell container types
69        enum {BSP, KD, VSP_KD, VSP_BSP};
70 
71        /// view cells evaluation type
72        enum {PER_OBJECT, PER_TRIANGLE};
73
74        /** Constructor taking the initial and construction samples.
75                @param initialSamples the maximal number of samples used for creating the hierarchy
76                of view cells
77                @param constructionSamples the maximal number of samples used for construction
78        */
79        ViewCellsManager(const int initialSamples, const int constructionSamples);
80
81        ViewCellsManager();
82
83        virtual ~ViewCellsManager();
84
85        /** Constructs view cells container taking a preprocessor
86                @returns the output rays (if not null)
87        */
88        int Construct(Preprocessor *preprocessor, VssRayContainer *outRays = NULL);
89
90        /** Constructs view cell container with a given number of samples.
91        */
92        virtual int ConstructSubdivision(const ObjectContainer &objects,
93                                                  const VssRayContainer &rays) = 0;
94
95        /** Computes sample contributions of the rays to the view cells PVS.
96       
97                @param rays bundle of rays used to find intersections with view cells and
98                adding the contribution
99                @param addRays true if rays should be added to the PVSs of the viewcells they
100                intersect
101                @param storeViewCells true if view cells should be stored in the ray
102        */
103        float ComputeSampleContributions(const VssRayContainer &rays,
104                                                                   const bool addContributions,
105                                                                   const bool storeViewCells);
106
107        /** Add sample contributions to the viewcells they intersect */
108        void AddSampleContributions(const VssRayContainer &rays);
109 
110
111        /** Computes sample contribution of a simgle ray to the view cells PVS.
112                @param ray finds intersections with view cells and holds the contribution
113                @param castRay true if ray should be cast to gain the information, false if ray
114                is already holding the information and need not be recast.
115         
116                @returns number of sample contributions
117        */
118        virtual float ComputeSampleContributions(VssRay &ray,
119                                                                                         const bool addRays,
120                                                                                         const bool storeViewCells);
121
122        virtual void AddSampleContributions(VssRay &ray);
123
124        /** Prints out statistics of the view cells.
125        */
126        virtual void PrintStatistics(ostream &s) const;
127
128        /** Post processes view cells givemŽa number of rays.
129        */
130        virtual int PostProcess(const ObjectContainer &objects,
131                                                        const VssRayContainer &rays) = 0;
132
133        /** Show visualization of the view cells.
134        */
135        virtual void Visualize(const ObjectContainer &objects,
136                                                   const VssRayContainer &sampleRays) = 0;
137
138        /** type of the view cell container.
139        */
140        virtual int GetType() const = 0;
141
142        /** Load the input viewcells. The input viewcells should be given as a collection
143                of meshes. Each mesh is assume to form a bounded polyhedron defining the interior of
144                the viewcell. The method then builds a BSP tree of these view cells.
145               
146                @param filename file to load
147                @return true on success
148    */
149    virtual bool LoadViewCellsGeometry(const string filename);
150
151       
152        /** Constructs view cell from base triangle. The ViewCell is extruded along the normal vector.
153                @param the base triangle
154                @param the height of the newly created view cell
155        */
156        ViewCell *ExtrudeViewCell(const Triangle3 &baseTri, const float height) const;
157
158        /** Merges two view cells.
159                @note the piercing rays of the front and back will be ordered   
160                @returns new view cell based on the merging.
161        */
162        ViewCellInterior *MergeViewCells(ViewCell *front, ViewCell *back) const;
163
164        /** Merges a container of view cells.
165                @returns new view cell based on the merging.
166        */
167        ViewCellInterior *MergeViewCells(ViewCellContainer &children) const;
168       
169        /** Generates view cell of type specified by this manager
170        */
171        virtual ViewCell *GenerateViewCell(Mesh *mesh = NULL) const = 0;
172
173        /** Adds a new view cell to the list of predefined view cells.
174        */
175        void AddViewCell(ViewCell *viewCell);
176
177        /** Derive view cells from objects.
178        */
179        void DeriveViewCells(const ObjectContainer &objects,
180                                                 ViewCellContainer &viewCells,
181                                                 const int maxViewCells) const;
182
183        /** Sets maximal number of samples used for the
184                construction of the view cells.
185        */
186        void SetVisualizationSamples(const int visSamples);
187
188        /** Sets maximal number of samples used for the construction of the view cells.
189        */
190        void SetConstructionSamples(const int constructionSamples);
191
192        /** Sets maximal number of samples used for the visualization of the view cells.
193        */
194        void SetInitialSamples(const int initialSamples);
195
196        /** Sets maximal number of samples used for the post processing of the view cells.
197        */
198        void SetPostProcessSamples(const int postProcessingSamples);
199
200        /** See set.
201        */
202        int GetVisualizationSamples() const;
203
204        /** See set.
205        */
206        int GetConstructionSamples() const;
207
208        /** See set.
209        */
210        int GetPostProcessSamples() const;
211
212        /** Returns true if view cells wer already constructed.
213        */
214        virtual bool ViewCellsConstructed() const = 0;
215
216        /** cast line segment to get a list of unique viewcells which are intersected
217                by this line segment
218        */
219 
220        virtual int CastLineSegment(const Vector3 &origin,
221                                                          const Vector3 &termination,
222                                                          ViewCellContainer &viewcells
223                                                          ) = 0;
224
225        virtual void GetPvsStatistics(PvsStatistics &stat);
226
227        virtual void GetPrVS(const Vector3 &viewPoint, PrVs &prvs);
228 
229        /** Get a viewcell containing the specified point
230        */
231        virtual ViewCell *GetViewCell(const Vector3 &point) const = 0;
232 
233        virtual void PrintPvsStatistics(ostream &s);
234
235        /** Updates pvs of the view cell hierarchy if necessary.
236        */
237        void UpdatePvs();
238
239        /** Returns probability that view point lies in one view cell.
240        */
241        virtual float GetProbability(ViewCell *viewCell) = 0;
242
243        /** Returns render cost of a single view cell given the render cost of an object.
244        */
245        float GetRendercost(ViewCell *viewCell) const;
246
247        /** Returns reference to container of loaded / generated view cells.
248        */
249        ViewCellContainer &GetViewCells();
250
251        /** Helper function used to split ray sets uniformly
252                into one that is currently used and the other that
253                is saved for later processing.
254                @param sourceRays the input ray set
255                @param maxSize the maximal number of rays that will be used
256                @param usedRays returns the used ray set
257                @param savedRays if not null, returns the saved ray set
258        */
259        void GetRaySets(const VssRayContainer &sourceRays,
260                                        const int maxSize,
261                                        VssRayContainer &usedRays,
262                                        VssRayContainer *savedRays = NULL) const;
263       
264        /** Returns accumulated area of all view cells.
265        */
266        float GetAccVcArea();
267
268        /** Returns area of one view cell.
269        */
270        virtual float GetArea(ViewCell *viewCell) const;
271
272        /** Returns volume of view cell.
273        */
274        virtual float GetVolume(ViewCell *viewCell) const;
275
276        /** Sets the current renderer mainly for view cells statistics.
277        */
278        void SetRenderer(Renderer *renderer);
279
280        /** Computes a (random) view point in the valid view space.
281                @returns true if valid view point was found
282        */
283        virtual bool GetViewPoint(Vector3 &viewPoint) const;
284
285        /** Returns true if this view point is in the valid view space.
286        */
287        virtual bool ViewPointValid(const Vector3 &viewPoint) const;
288
289        /** Sets a view space boundary.
290        */
291        void SetViewSpaceBox(const AxisAlignedBox3 &box);
292
293        AxisAlignedBox3 GetViewSpaceBox() const;
294
295        /** Creates mesh for this view cell.
296        */
297        virtual void CreateMesh(ViewCell *vc) = NULL;
298
299        /** Writes view cells to disc.
300        */
301        virtual bool ExportViewCells(const string filename);
302
303        /** Casts beam to collect view cells.
304        */
305        virtual int CastBeam(Beam &beam);
306
307        /** Checks if view cell is considered as valid.
308        */
309        virtual bool CheckValidity(ViewCell *vc,
310                                                           int minPvsSize,
311                                                           int maxPvsSize) const;
312
313       
314        /** Sets validity of view cell
315        */
316        virtual void SetValidity(ViewCell *vc,
317                                                         int minPvsSize,
318                                                         int maxPvsSize) const;
319
320        /** sets validy of all viewcells
321        */
322        virtual void SetValidity(
323                                                         int minPvsSize,
324                                                         int maxPvsSize) const;
325
326
327        /** set valid viewcells in the range of pvs. sorts the viewcells
328          according to the pvs and then pickups those in the ranges
329          */
330        void SetValidityPercentage(const float minValid, const float maxValid);
331
332    int CountValidViewcells() const;
333
334        /** Returns maximal allowed pvs size.
335        */
336        int GetMaxPvsSize() const;
337
338        /** Returns maximal allowed pvs size.
339        */
340        int GetMinPvsSize() const;
341
342        /** Returns maximal ratio. i.e., currentPVs / maxPvs,
343                where pvs is still considered valid.
344        */
345        float GetMaxPvsRatio() const;
346
347        /** Exports view cell geometry.
348        */
349        virtual void ExportViewCellGeometry(Exporter *exporter,
350                                                                                ViewCell *vc,
351                                                                                const Plane3 *clipPlane = NULL) const = 0;
352
353        virtual void FinalizeViewCells(const bool createMesh);
354
355
356        /** Loads view cells from file. The view cells manager is created with
357                respect to the loaded view cells.
358
359                @returns the view cells manager if loading was successful, false otherwise
360        */
361        static ViewCellsManager *LoadViewCells(const string filename,
362                                                                                   ObjectContainer *objects);
363
364        /** Evaluates statistics values on view cells.
365        */
366        void EvaluateRenderStatistics(float &totalRenderCost,
367                                                                  float &expectedRenderCost,
368                                                                  float &deviation,
369                                                                  float &variance,
370                                                                  int &totalPvs,
371                                                                  float &avgRenderCost);
372
373
374        /** Returns hierarchy of the view cells.
375        */
376        ViewCellsTree *GetViewCellsTree();
377
378        virtual void CollectMergeCandidates(const VssRayContainer &rays,
379                                                                                vector<MergeCandidate> &candidates) = 0;
380
381        void CollectViewCells(const int n);
382
383        /** Returns true if this (logical) view cell is equal to a spatial node.
384        */
385        virtual bool EqualToSpatialNode(ViewCell *viewCell) const;
386
387        /** Sets current view cells set to active, i.e., the sampling is done in this view cell set.
388        */
389        void SetViewCellsActive();
390
391        /** Evaluates worth of current view cell hierarchy.
392        */
393        void EvalViewCellPartition(Preprocessor *preprocessor);
394
395        /** Sets maximal size of a view cell filter.
396        */
397        void SetMaxFilterSize(const int size);
398
399        /** Deletes interior nodes from the tree which have negative merge cost set (local merge)
400        */
401        void DeleteLocalMergeTree(ViewCell *vc) const;
402 
403        /** Evaluautes histogram for a given number of view cells.
404        */
405        void EvalViewCellHistogram(const string filename, const int nViewCells);
406
407        /** Evaluautes histogram for a given number of view cells.
408        */
409        void EvalViewCellHistogramForPvsSize(const string filename, const int nViewCells);
410
411        /** Evaluates the render cost of a view cell.
412        */
413        float EvalRenderCost(Intersectable *obj) const;
414
415protected:
416
417        /** Returns the bounding box of filter width.
418        */
419        AxisAlignedBox3 GetFilterBBox(const Vector3 &viewPoint, const float width) const;
420
421        /** Intersects box with the tree and returns the number of intersected boxes.
422                @returns number of view cells found
423        */
424        virtual int ComputeBoxIntersections(const AxisAlignedBox3 &box,
425                                                                                ViewCellContainer &viewCells) const;
426
427        virtual void TestFilter(const ObjectContainer &objects) {};
428
429        /**
430                if the view cells tree was already constructed or not.
431        */
432        bool ViewCellsTreeConstructed() const;
433
434        int CastPassSamples(const int samplesPerPass,
435                                                const int sampleType,
436                                                VssRayContainer &vssRays) const;
437
438        void ParseEnvironment();
439
440        /** Creates unique view cell ids.
441        */
442        void CreateUniqueViewCellIds();
443
444        /** Finalizes, i.e., creates mesh, volume, area etc. for the view cell.
445        */
446        virtual void Finalize(ViewCell *viewCell, const bool createMesh);
447
448        /** Recollects view cells and resets statistics.
449        */
450        void ResetViewCells();
451       
452        /** Collects the view cells in the view cell container.
453        */
454        virtual void CollectViewCells() = 0;
455       
456        /** Evaluates view cells statistics and stores it in
457                mViewCellsStatistics.
458        */
459        void EvaluateViewCellsStats();
460
461        //-- helper functions for view cell visualization
462
463        /** Exports the view cell partition.
464        */
465        void ExportViewCellsForViz(Exporter *exporter) const;
466
467        /** Sets exporter color.
468        */
469        virtual void ExportColor(Exporter *exporter, ViewCell *vc) const = 0;
470
471
472        virtual float GetViewSpaceVolume();
473       
474        /** Creates meshes from the view cells.
475        */
476        void CreateViewCellMeshes();
477
478        /** Takes different measures to prepares the view cells after loading them from disc.
479        */
480        virtual void PrepareLoadedViewCells() {};
481
482        /** Constructs local view cell merge hierarchy.
483        */
484        ViewCell *ConstructLocalMergeTree(ViewCell *currentViewCell,
485                                                                          const ViewCellContainer &viewCells);
486
487        /** Constructs local view cell merge hierarchy based solely on similarity with the
488                current viewcell
489        */
490        ViewCell *ConstructLocalMergeTree2(ViewCell *currentViewCell,
491                                                                           const ViewCellContainer &viewCells);
492 
493
494        /** Creates clip plane for visualization.
495        */
496        void CreateClipPlane();
497
498        Plane3 mClipPlane;
499        bool mUseClipPlaneForViz;
500
501
502        /// Renders the view cells.
503        Renderer *mRenderer;
504
505        /// Loaded view cells
506        ViewCellContainer mViewCells;
507
508        ViewCellsTree *mViewCellsTree;
509
510        bool mPruneEmptyViewCells;
511
512        bool mViewCellPvsIsUpdated;
513        /// maximum number of samples taken for construction of the view cells
514        int mConstructionSamples;
515        int mSamplesPerPass;
516        int mInitialSamples;
517        int mPostProcessSamples;
518        int mVisualizationSamples;
519
520        float mTotalAreaValid;
521        float mTotalArea;
522
523        int mMaxPvsSize;
524        int mMinPvsSize;
525        float mMaxPvsRatio;
526
527        int mSamplingType;
528        int mEvaluationSamplingType;
529        int mNumActiveViewCells;
530        bool mCompressViewCells;
531
532        ViewCellsStatistics mCurrentViewCellsStats;
533        /// the scene bounding box
534        AxisAlignedBox3 mViewSpaceBox;
535        /// holds the view cell meshes
536        MeshContainer mMeshContainer;
537        /// if view cells should be exported
538        bool mExportViewCells;
539
540        //bool mMarchTree);
541        bool mOnlyValidViewCells;
542
543        /// if rays should be used to collect merge candidates
544        bool mUseRaysForMerge;
545        /// merge the view cells?
546        bool mMergeViewCells;
547
548        /// the width of the box filter
549        float mFilterWidth;
550        int mMaxFilterSize;
551
552        //-- visualization options
553       
554        /// color code for view cells
555        int mColorCode;
556        bool mExportGeometry;
557        bool mExportRays;
558
559        bool mViewCellsFinished;
560
561        bool mEvaluateViewCells;
562
563        bool mShowVisualization;
564
565        // HACK in order to detect empty view cells
566        void CollectEmptyViewCells();
567        void TestEmptyViewCells(const ObjectContainer &obj);
568
569        ViewCellContainer mEmptyViewCells;
570
571        int mRenderCostEvaluationType;
572};
573
574
575
576/**
577        Manages different higher order operations on the view cells.
578*/
579class BspViewCellsManager: public ViewCellsManager
580{
581
582public:
583        /** Constructor taking the bsp tree and the number of samples
584                used to construct the bsp tree.
585        */
586        BspViewCellsManager(BspTree *tree);
587
588        ~BspViewCellsManager();
589
590        int ConstructSubdivision(const ObjectContainer &objects,
591                                  const VssRayContainer &rays);
592
593        int PostProcess(const ObjectContainer &objects,
594                                        const VssRayContainer &rays);
595
596        void Visualize(const ObjectContainer &objects,
597                                   const VssRayContainer &sampleRays);
598
599        int GetType() const;
600       
601        ViewCell *GenerateViewCell(Mesh *mesh = NULL) const;
602
603        bool ViewCellsConstructed() const;
604
605        //void PrintStatistics(ostream &s) const;
606
607        int CastLineSegment(const Vector3 &origin,
608                                                const Vector3 &termination,
609                                                ViewCellContainer &viewcells);
610       
611        float GetProbability(ViewCell *viewCell);
612       
613
614        /** Get a viewcell containing the specified point */
615        ViewCell *GetViewCell(const Vector3 &point) const;
616
617        void CreateMesh(ViewCell *vc);
618
619        void ExportViewCellGeometry(Exporter *exporter,
620                                                                ViewCell *vc,
621                                                                const Plane3 *clipPlane = NULL) const;
622       
623        void CollectMergeCandidates(const VssRayContainer &rays,
624                                                                vector<MergeCandidate> &candidates);
625
626        void Finalize(ViewCell *viewCell, const bool createMesh);
627
628        bool ExportViewCells(const string filename);
629
630        ViewCell *ConstructSpatialMergeTree(BspNode *root);
631
632
633protected:
634
635
636        /** HACK
637        */
638        void AddCurrentViewCellsToHierarchy();
639
640        void CollectViewCells();
641
642        void ExportColor(Exporter *exporter, ViewCell *vc) const;
643       
644
645
646        /// the BSP tree.
647        BspTree *mBspTree;
648       
649        vector<BspRay *> mBspRays;
650
651private:
652
653        /** Exports visualization of the BSP splits.
654        */
655        void ExportSplits(const ObjectContainer &objects);
656
657        /** Exports visualization of the BSP PVS.
658        */
659        void ExportBspPvs(const ObjectContainer &objects);
660
661        void TestSubdivision();
662};
663
664/**
665        Manages different higher order operations on the KD type view cells.
666*/
667class KdViewCellsManager: public ViewCellsManager
668{
669
670public:
671
672        KdViewCellsManager(KdTree *tree);
673
674        int ConstructSubdivision(const ObjectContainer &objects,
675                                  const VssRayContainer &rays);
676
677        int CastLineSegment(const Vector3 &origin,
678                                                const Vector3 &termination,
679                                                ViewCellContainer &viewcells);
680
681        int PostProcess(const ObjectContainer &objects,
682                                        const VssRayContainer &rays);
683
684        void Visualize(const ObjectContainer &objects,
685                                   const VssRayContainer &sampleRays);
686
687        int GetType() const;
688
689        bool ViewCellsConstructed() const;
690
691        ViewCell *GenerateViewCell(Mesh *mesh) const;
692
693        /** Prints out statistics of this approach.
694        */
695        //  virtual void PrintStatistics(ostream &s) const;
696        ViewCell *GetViewCell(const Vector3 &point) const { return NULL; }
697
698        float GetProbability(ViewCell *viewCell);
699       
700
701        void CreateMesh(ViewCell *vc);
702
703        void ExportViewCellGeometry(Exporter *exporter,
704                                                                ViewCell *vc,
705                                                                const Plane3 *clipPlane = NULL) const;
706
707        void CollectMergeCandidates(const VssRayContainer &rays,
708                                                                vector<MergeCandidate> &candidates);
709
710protected:
711
712        /** Collects view cells from a hierarchy.
713        */
714        void CollectViewCells();
715
716        KdNode *GetNodeForPvs(KdLeaf *leaf);
717
718        void ExportColor(Exporter *exporter, ViewCell *vc) const;
719
720
721        /// the BSP tree.
722        KdTree *mKdTree;
723
724        /// depth of the KD tree nodes with represent the view cells
725        int mKdPvsDepth;
726};
727
728/**
729        Manages different higher order operations on the view cells
730        for vsp kd tree view cells.
731*/
732class VspKdViewCellsManager: public ViewCellsManager
733{
734
735public:
736
737        VspKdViewCellsManager(VspKdTree *vspKdTree);
738
739        int ConstructSubdivision(const ObjectContainer &objects,
740                                  const VssRayContainer &rays);
741
742
743        int PostProcess(const ObjectContainer &objects,
744                                        const VssRayContainer &rays);
745
746        void Visualize(const ObjectContainer &objects,
747                                   const VssRayContainer &sampleRays);
748
749        int GetType() const;
750       
751        bool ViewCellsConstructed() const;
752
753        //virtual void PrintStatistics(ostream &s) const;
754
755        ViewCell *GenerateViewCell(Mesh *mesh) const;
756
757
758    int CastLineSegment(const Vector3 &origin,
759                                                const Vector3 &termination,
760                                                ViewCellContainer &viewcells);
761
762        ViewCell *GetViewCell(const Vector3 &point) const { return NULL; }
763
764        float GetProbability(ViewCell *viewCell);
765
766
767        void CreateMesh(ViewCell *vc);
768
769        void ExportViewCellGeometry(Exporter *exporter,
770                                                                ViewCell *vc,
771                                                                const Plane3 *clipPlane = NULL) const;
772
773        void CollectMergeCandidates(const VssRayContainer &rays, vector<MergeCandidate> &candidates);
774
775protected:
776
777        void ExportLeaves(const ObjectContainer &objects,
778                                          const VssRayContainer &sampleRays);
779
780        void CollectViewCells();
781
782        void ExportColor(Exporter *exporter, ViewCell *vc) const;
783
784
785
786        /// the BSP tree.
787        VspKdTree *mVspKdTree;
788};
789
790
791
792/**
793        Manages different higher order operations on the view cells.
794*/
795class VspBspViewCellsManager: public ViewCellsManager
796{
797
798public:
799
800        VspBspViewCellsManager(VspBspTree *tree);
801        ~VspBspViewCellsManager();
802
803        int ConstructSubdivision(const ObjectContainer &objects,
804                                  const VssRayContainer &rays);
805
806        int PostProcess(const ObjectContainer &objects,
807                                        const VssRayContainer &rays);
808
809        void Visualize(const ObjectContainer &objects,
810                                   const VssRayContainer &sampleRays);
811
812        int GetType() const;
813       
814        ViewCell *GenerateViewCell(Mesh *mesh = NULL) const;
815
816        bool ViewCellsConstructed() const;
817
818       
819        int CastLineSegment(const Vector3 &origin,
820                                                const Vector3 &termination,
821                                                ViewCellContainer &viewcells);
822
823        float GetProbability(ViewCell *viewCell);
824       
825        ViewCell *GetViewCell(const Vector3 &point) const;
826
827        bool GetViewPoint(Vector3 &viewPoint) const;
828
829        bool ViewPointValid(const Vector3 &viewPoint) const;
830
831        void CreateMesh(ViewCell *vc);
832
833        //bool LoadViewCellsGeometry(const string filename, ObjectContainer *objects);
834        bool ExportViewCells(const string filename);
835
836        int CastBeam(Beam &beam);
837
838        void ExportViewCellGeometry(Exporter *exporter,
839                                                                ViewCell *vc,
840                                                                const Plane3 *clipPlane = NULL) const;
841
842        //float GetVolume(ViewCell *viewCell) const;
843
844        void Finalize(ViewCell *viewCell, const bool createMesh);
845
846        void CollectMergeCandidates(const VssRayContainer &rays, vector<MergeCandidate> &candidates);
847
848        /** Returns true if this view cell is equivavalent to a spatial node.
849        */
850        bool EqualToSpatialNode(ViewCell *viewCell) const;
851
852
853protected:
854
855        int ComputeBoxIntersections(const AxisAlignedBox3 &box, ViewCellContainer &viewCells) const;
856       
857        /** Returns node of the spatial hierarchy corresponding to the view cell
858                if such a node exists.
859        */
860        BspNode *GetSpatialNode(ViewCell *viewCell) const;
861
862        /** HACK
863        */
864        void AddCurrentViewCellsToHierarchy();
865
866        /** Merges the view cells.
867        */
868        void MergeViewCells(const VssRayContainer &rays,
869                                                const ObjectContainer &objects);
870       
871        void RefineViewCells(const VssRayContainer &rays, const ObjectContainer &objects);
872
873        void CollectViewCells();
874
875        /** Returns maximal depth difference of view cell
876                leaves in tree.
877        */
878        int GetMaxTreeDiff(ViewCell *vc) const;
879       
880
881        void ExportColor(Exporter *exporter, ViewCell *vc) const;
882
883        void PrepareLoadedViewCells();
884
885        ViewCell *ConstructSpatialMergeTree(BspNode *root);
886
887        void TestFilter(const ObjectContainer &objects);
888
889
890
891        /// the view space partition BSP tree.
892        VspBspTree *mVspBspTree;
893
894
895private:
896
897        /** Exports visualization of the BSP splits.
898        */
899        void ExportSplits(const ObjectContainer &objects,
900                                          const VssRayContainer &rays);
901
902        /** Exports visualization of the BSP PVS.
903        */
904        void ExportBspPvs(const ObjectContainer &objects,
905                                          const VssRayContainer &rays);
906
907        void TestSubdivision();
908};
909
910
911class ViewCellsManagerFactory
912{
913
914public:
915
916        ViewCellsManager *Create(const string mName);
917
918};
919
920#endif
Note: See TracBrowser for help on using the repository browser.