source: GTP/trunk/Lib/Vis/Preprocessing/integration.txt @ 1676

Revision 1676, 3.9 KB checked in by mattausch, 18 years ago (diff)

worked on pvs heuristics

Line 
11) include following libs into your application:
2
3Preprocessor.lib zdll.lib zziplib.lib xerces-c_2.lib devil.lib glut32.lib OpenGL32.Lib glu32.lib glew32.lib glew32s.lib
4
5
62) view cells are loaded using a similar piece of code like this:
7
8   OctreeBoundingBoxConverter bconverter(this);
9   ObjectContainer objects;
10
11   // load the view cells assigning the found objects to the pvss
12
13   GtpVisibilityPreprocessor::ViewCellsManager *viewCellsManager =
14      GtpVisibilityPreprocessor::ViewCellsManager::LoadViewCells(filename, &objects, &bconverter);
15
16      The bouning box converter is used to associate entities in the
17      engine and connect them to entities of the visibility
18      preprocessing file.
19
203) The parameter objects:
21
22      The parameter objects of the type ObjectContainer contains the primitives which
23      will be set visible / invisible accoring to the pvs.
24     
25      They are given as pointers to an Intersectable.
26      It is therefore necessary to write wrapper for the primitives in
27      your engine. Something like:
28
29 
30/**
31        Wrapper for Ogre object intances for use with the preprocessed view cells.
32*/
33class __declspec(dllexport) OgreMeshInstance: public GtpVisibilityPreprocessor::Intersectable
34{
35public:
36        /** The default constructor taking an entity into account.
37        */
38        OgreMeshInstance(Entity *ent);
39       
40        /** Returns 'mesh' associated with this instance.
41        */
42        Entity *GetEntity() const;
43
44        /** See get.
45        */
46        void SetEntity(Entity *entity);
47
48
49        /////////////////////////////
50        //-- inherited functions from Intersectable
51
52        GtpVisibilityPreprocessor::AxisAlignedBox3 GetBox() const;
53       
54        int CastRay(GtpVisibilityPreprocessor::Ray &ray);
55       
56        bool IsConvex() const;
57        bool IsWatertight() const;
58        float IntersectionComplexity();
59 
60        int NumberOfFaces() const;
61        int Type() const;
62
63        int GetRandomSurfacePoint(GtpVisibilityPreprocessor::Vector3 &point,
64                                                          GtpVisibilityPreprocessor::Vector3 &normal);
65
66        int GetRandomVisibleSurfacePoint(GtpVisibilityPreprocessor::Vector3 &point,
67                                                                         GtpVisibilityPreprocessor::Vector3 &normal,
68                                                                         const GtpVisibilityPreprocessor::Vector3 &viewpoint,
69                                                                         const int maxTries);
70 
71        ostream &Describe(ostream &s);
72       
73
74protected:
75       
76        Entity *mEntity;
77};
78
79
804) The bounding box converter has to implement the following interface:
81 
82
83/** Class used to assign unique indices to objects using a comparison of bounding boxes.
84*/
85class BoundingBoxConverter
86{
87public:
88        /** Takes a vector of indexed bounding boxes and uses it to identify objects with a similar bounding box
89                and to assign them their index (id).
90                The objects are returned in the object container.
91               
92                @returns true if conversion was successful
93        */
94        virtual bool IdentifyObjects(const IndexedBoundingBoxContainer &iboxes,
95                                ObjectContainer &objects) const
96        {
97                // default: do nothing as we assume that a unique id is already assigned to the objects.
98                return true;
99        }
100};
101
102
103The interface only contains the method IdentifyObjects, which will be
104responsible for the conversion.
105
1065) The ViewCellsManager:
107
108This class is there to control the view cells. You can get a view
109point by using something like the following:
110
111GtpVisibilityPreprocessor::Vector3 viewPoint;
112
113ViewCell *currentViewCell = viewCellsManager->GetViewCell(const Vector3 &viewPoint);
114
115
1166) The view cell: the Pvs of the current view cell can be received by using
117
118ObjectPvs pvs = viewCell->GetPvs();
119
120Then objects of the pvs can be iterated over and set visibible like in
121this example for Ogre:
122
123
124     GtpVisibilityPreprocessor::ObjectPvsMap::const_iterator oit, oit_end = viewCell->GetPvs().mEntries.end();
125
126     ////////////
127     //-- set PVS of view cell to visible
128
129     for (oit = viewCell->GetPvs().mEntries.begin(); oit != oit_end; ++ oit)
130     {
131        GtpVisibilityPreprocessor::Intersectable *entry = (*oit).first;
132        // no associated geometry found
133        if (!entry) continue;
134       
135        OgreMeshInstance *omi = dynamic_cast<OgreMeshInstance *>(entry);
136        omi->GetEntity()->setVisible(load);
137     }
Note: See TracBrowser for help on using the repository browser.