Changeset 65 for trunk/VUT/GtpVisibility
- Timestamp:
- 04/28/05 22:55:26 (20 years ago)
- Location:
- trunk/VUT/GtpVisibility
- Files:
-
- 12 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/VUT/GtpVisibility/include/HierarchyInterface.h
r59 r65 41 41 */ 42 42 void SetSceneRoot(HierarchyNode *root); 43 /** Get the root of the scene hierarchy. 44 @return the hierarchy root 45 */ 46 HierarchyNode *GetSceneRoot() const { 47 return mSceneRoot; 48 } 43 49 /** Sets the scene root and initialises this scene traverser for a traversal. 44 50 @param root current scene root -
trunk/VUT/GtpVisibility/include/PreprocessingManager.h
r59 r65 2 2 #define _VisibilityPreprocessingManager_H__ 3 3 4 #include "GtpVisibilitySceneTraverser.h"5 #include "GtpVisibilityInfo.h" 4 #include <string> 5 using namespace std; 6 6 7 #include "HierarchyInterface.h" 8 #include "VisibilityInfo.h" 9 #include "VisibilityVector3.h" 7 10 8 /** This abstract class defining interface for a specific visibility query 9 algorithm. The algorithm is either used to render the scene with false colors 10 and query visibility of scene nodes and polygons */ 11 */ 12 class VisibilityPreprocessingInterface 13 { 14 public: 11 namespace GtpVisibility { 12 13 /** 14 This class defines an interface to the external visibility preprocessor. 15 It allows to export the static part of the scene to a file in the XML format 16 understood by the preprocessor. By default all the exported meshes are considered 17 as scene occluders, whereas occludees are formed by their bounding boxes, 18 and bounding boxes of the scene hierarchy. 15 19 20 This class also allows to import the preprocessed data with PVS 21 information for the viewcells (note that the viewcells are either generated 22 automatically by the preprocessor or loaded from a polyhedral definition stored 23 in a file (see documentation for the Preprocessor class). 24 */ 25 26 class PreprocessingManager 27 { 28 public: 29 30 /** 31 Constructor taking a HierarchyInterface as argument. 32 The HierarchyInterface makes the PreprocessingManager independent from the actual 33 scene representation as long as it supports a required set of methods. 34 */ 35 PreprocessingManager( HierarchyInterface *hierarchyInterface ); 36 16 37 17 /** Constructor taking a scene traverser for a specific type of hierarchy as argument. 18 */ 19 VisibilityPreprocessingInterface( GtpVisibility::SceneTraverser *sceneTraverser ); 38 /** 39 Destructor which deletes all data describing static scene visibility. 40 */ 41 virtual ~PreprocessingManager(); 42 43 /** 44 Export the scene for visibility preprocessing. Exports the hierarchyInterface including 45 its bounding boxes + mesh data. Note that the bounding boxes can be used as occludees 46 by the extrenal preprocessor. The viewcell data will either be supplied directly to the 47 visibility preprocessing standalone module. 48 49 @param filename name of the file to export. 50 @return true if the export was succesful. 51 */ 52 virtual bool ExportScene(const string filename 53 ) = 0; 54 55 /** 56 Load preprocessed visibility information. The loaded data is matched with the current 57 scene graph. The topology of the current scene graph has to match with the loaded data. 58 There is also geometrical check of the bounding boxes. Once loading is succesful the 59 PreprocessingManager establishes links from its internal visibility representation 60 to the scene graph: no change of this part of the scene graph is allowed; this would 61 violate the static scene assumption! 62 63 @param filename name of the file to load. 64 @return true if the loading was succesful. 65 */ 66 virtual bool LoadPreprocessedData(const string filename 67 ) = 0; 68 69 /** 70 Retrieve a PVS corresponding to the given spherical neighborhood of the point. 71 Typically the implementation of this method will firs locate all viewcells 72 intersecting the sphere using efficient logarithmic search enhanced with caching 73 the last query. Then it computes a union of the PVS for the found viewcells. 74 75 @param point the center point of the spherical neighborhood 76 77 @param radius the radius of the spherical neighborhood. Note that if radius==0 a 78 more efficient implementation of the method for this special case can be used. 79 80 @param visibleNodes is not NULL 81 a set of visible scene graph nodes is added to the visibleNodes container. 82 This set is formed of visible leafs or fully visible interior nodes. 83 If visibleMeshes != NULL the set of visible meshes is 84 added to the container. Returns true if the corresponding PVS exists. 85 */ 86 virtual bool GetPVS(const Vector3 &point, 87 const float radius, 88 InfoContainer<NodeInfo> *visibleNodes, 89 InfoContainer<MeshInfo> *visibleMeshes ); 90 91 20 92 93 /** Sets the scene traverser. 94 @remark the scene traverser is dependent on the type of hierarchyInterface the scene consists of. 95 */ 96 virtual void SetSceneTraverser( HierarchyInterface *hierarchyInterface ) { 97 mSceneTraverser = hierarchyInterface; 98 } 99 100 protected: 101 /** Get checksum of the current occluder set in the scene graph. This method is used to check 102 if the preprocessed data matches the current scene graph 103 -> $$ could be moved to VisibilitySceneTraverser */ 104 long GetOccluderChecksum() const { 105 return 0; 106 } 107 108 109 /** Get checksum of the current occludee set in the scene graph. This method is used to check 110 if the preprocessed data matches the current scene graph 111 -> $$ could be moved to VisibilitySceneTraverser */ 112 long GetOccludeeChecksum() const { 113 return 0; 114 } 115 116 117 /** 118 Find viewcells intersecting a spherical neighborhood of a point. 119 Returns false if no viewcell was found. 120 */ 121 virtual bool LocateViewCellIds(const Vector3 ¢er, 122 const float radius, 123 vector<int> *viewCellIds 124 ) = 0; 125 126 /** 127 Add a PVS of the given viewcell to the already evaluated PVS by computing 128 a union with visibleNodes and visibleMeshes. Returns the number of added entries. 129 */ 130 virtual int AddViewCellPVS(const int cellID, 131 InfoContainer<NodeInfo> *visibleNodes, 132 InfoContainer<MeshInfo> *visibleMeshes ) = 0; 133 134 HierarchyInterface *mSceneTraverser; 135 }; 21 136 22 /**23 Export the scene for visibility preprocessing. Exports the hierarchy including24 its bounding boxes + mesh data for occluders. The viewcell data will either be25 supplied directly to the visibility preprocessing standalone module26 */27 virtual ErrorCode ExportScene(const string filename);28 29 30 /**31 Load preprocessed visibility information32 */33 virtual ErrorCode LoadPreprocessedData(const string filename);34 35 /**36 Uses the specified sphere to find its PVS37 */38 virtual ErrorCode GetPointPVS(const Vector3D &point,39 VisibilityContainer<NodeVisibilityInfo> *visibleNodes,40 VisibilityContainer<MeshVisibilityInfo> *visibleMeshes ) = 0;41 42 /**43 Uses the specified sphere to find its PVS44 */45 virtual ErrorCode GetSpherePVS(const Vector3D &point,46 const float radius,47 VisibilityContainer<NodeVisibilityInfo> *visibleNodes,48 VisibilityContainer<MeshVisibilityInfo> *visibleMeshes ) = 0;49 50 51 52 /** Sets the scene traverser.53 @remark the scene traverser is dependent on the type of hierarchy the scene consists of.54 */55 void setSceneTraverser( GtpVisibility::SceneTraverser *sceneTraverser );56 57 protected:58 /** Helper method for getting a scene name */59 string GetSceneName() const;60 61 /** Get checksum of the current occluder set in the scene graph. This method is used to check62 if the preprocessed data matches the current scene graph63 -> $$ could be moved to VisibilitySceneTraverser */64 long GetOccluderChecksum() const;65 66 /** Get checksum of the current occludee set in the scene graph. This method is used to check67 if the preprocessed data matches the current scene graph68 -> $$ could be moved to VisibilitySceneTraverser */69 long GetOccludeeChecksum() const;70 71 /**72 Finds a viewcell given a point in space73 */74 virtual ErrorCode FindViewCellId(const Vector3D &point,75 int *viewCellId76 );77 78 /**79 Uses the specified viewcell to find its PVS80 */81 virtual ErrorCode GetViewCellPVS(const int cellID,82 VisibilityContainer<NodeVisibilityInfo> *visibleNodes,83 VisibilityContainer<MeshVisibilityInfo> *visibleMeshes ) = 0;84 85 GtpVisibility::SceneTraverser *mSceneTraverser;86 137 }; 87 138 88 #endif // VisibilityPreprocessing Manager139 #endif // VisibilityPreprocessingInterafce -
trunk/VUT/GtpVisibility/include/QueryManager.h
r59 r65 2 2 #define _VisibilityQueryManager_H__ 3 3 4 #include <vector> 5 4 6 #include "VisibilityInfo.h" 7 #include "VisibilityVector3.h" 8 #include "VisibilityCamera.h" 9 #include "VisibilityRay.h" 5 10 11 namespace GtpVisibility { 12 13 /** This abstract class defines interface for a specific visibility query 14 algorithm. The interface supports two from point visibility queries and 15 the ray shooting query. The output of the queries consists of list of 16 visible meshes and hierarchy nodes. The from point queries will be implemented 17 either with item bufferring or based purelly on occlusion queries. Note that 18 the actuall implementation can also exploit the 19 output of the visibility preprocessor. 20 */ 21 class QueryManager 22 { 23 public: 24 /** Constructor taking a hierarchy interface as an argument. This allows to operate 25 onm different hierarchy types, while reusing the implementation of the query methods. 26 */ 27 QueryManager( HierarchyInterface *hierarchyInterface ); 28 29 /** 30 Computes restricted visibility from point by using an explicit camera to execute 31 the visibility query. 32 @param camera The camera to be used 6 33 7 /** This abstract class defining interface for a specific visibility query 8 algorithm. The algorithm is either used to render the scene with false colors 9 and query visibility of scene nodes and polygons */ 10 */ 11 class VisibilityQueryManager 12 { 13 public: 14 /** Constructor taking a scene traverser for a specific type of hierarchy as argument. 15 */ 16 VisibilityQueryManager( GtpVisibility::SceneTraverser *sceneTraverser ); 34 @param visibleNodes Pointer to the container where visible nodes should be added. 35 This set is formed of visible leafs or fully visible interior nodes. 36 If NULL no visible nodes are not evaluated. 17 37 38 @param visibleGeometry Pointer to the container where visible meshes should be added. 39 If NULL no visible meshes are not evaluated. 40 41 @param relativeVisibility If true the visibility member for 42 NodeInfo and MeshInfo represent relative visibility; i.e. the number of visible 43 pixels divided by the the number of projected pixels. 44 45 @return true if the corresponding PVS exists. 46 */ 47 virtual void 48 ComputeCameraVisibility(const Camera &camera, 49 InfoContainer<NodeInfo> *visibleNodes, 50 InfoContainer<MeshInfo> *visibleGeometry, 51 bool relativeVisibility = false 52 ) = 0; 53 54 /** 55 Uses the specified point to execute the visibility query in all directions. 56 @sa ComputeCameraVisibility() 57 */ 58 virtual void 59 ComputeFromPointVisibility(const Vector3 &point, 60 InfoContainer<NodeInfo> *visibleNodes, 61 InfoContainer<MeshInfo> *visibleGeometry, 62 bool relativeVisibility = false 63 ) = 0; 64 18 65 /** 19 Uses explicit camera to execute the visibility query 66 Ray shooting intreface: finds an intersection with objects in the scene. 67 68 @param ray The given input ray (assuming the ray direction is normalized) 69 70 @param visibleMeshes List of meshes intersecting the ray 71 72 @param isGlobalLine If false only first intersection with opaque object is returned. 73 Otherwise all intersections of the ray with the scene are found. 74 75 @return true if there is any intersection. 20 76 */ 21 virtual void 22 ComputeFromPointVisibility(const Camera &camera, 23 VisibilityContainer<NodeVisibilityInfo> *visibleNodes, 24 VisibilityContainer<MeshVisibilityInfo> *visibleGeometry ) = 0; 25 26 /** 27 Uses the specified point to execute the visibility query in all directions 28 */ 29 virtual void 30 ComputeFromPointVisibility(const Vector3D &point, 31 VisibilityContainer<NodeVisibilityInfo> *visibleNodes, 32 VisibilityContainer<MeshVisibilityInfo> *visibleGeometry ) = 0; 33 34 /** 35 Ray shooting intreface: finds an intersection with the first opaque 36 object in the scene if globalLine = false, otherwise finds all intersections 37 with the scene. 38 */ 39 virtual void 40 ShootRay(const Ray &ray, 41 VisibilityContainer<NodeVisibilityInfo> *visibleNodes, 42 VisibilityContainer<MeshVisibilityInfo> *visibleMeshes, 43 bool isGlobalLine = false 44 ) = 0; 45 46 47 /** 48 Preprocessing interface: PVS for a given point found using PVS of the corresponding viewcell 49 */ 50 virtual int 51 GetFromPointPVS(const Vector3D &point, 52 VisibilityContainer<NodeVisibilityInfo> *visibleNodes, 53 VisibilityContainer<MeshVisibilityInfo> *visibleMeshes ) = 0; 54 55 /** 56 Preprocessing interface: PVS for a given sphere using union of cell based PVS 57 */ 58 virtual int 59 GetFromSpherePVS(const Vector3D ¢er, 60 const float radius, 61 VisibilityContainer<NodeVisibilityInfo> *visibleNodes, 62 VisibilityContainer<MeshVisibilityInfo> *visibleMeshes ) = 0; 63 77 virtual bool 78 ShootRay(const Ray &ray, 79 std::vector<Mesh *> *visibleMeshes, 80 bool isGlobalLine = false 81 ); 64 82 65 83 /** Sets the scene traverser. 66 @remark the scene traverser is dependent on the type of hierarchythe scene consists of.84 @remark the scene traverser depends on the type of hierarchyInterface the scene consists of. 67 85 */ 68 void setSceneTraverser( GtpVisibility::SceneTraverser *sceneTraverser);86 void SetSceneTraverser(HierarchyInterface *hierarchyInterface ); 69 87 70 88 protected: 71 GtpVisibility::SceneTraverser *mSceneTraverser;89 HierarchyInterface *mHierarchyInterface; 72 90 73 VisibilityPreprocessingInterface *mPreprocessingManager; 91 }; 92 74 93 }; 75 94 -
trunk/VUT/GtpVisibility/include/VisibilityInfo.h
r59 r65 2 2 #define _VisibilityInfo_H__ 3 3 4 #include <vector> 4 5 6 #include "VisibilityMesh.h" 7 #include "HierarchyInterface.h" 5 8 6 /** Class storing the visibility information of a scene node. 7 */ 8 class NodeVisibilityInfo { 9 /** pointer to the scene node */ 10 SceneNode *mNode; 11 /** node visibility can either be a number of visible pixels or relative 12 number of visible pixels (if the hardware queries will provide the 13 total number of ratsterized pixels */ 14 float mVisibility; 9 namespace GtpVisibility { 10 11 /** Class storing the visibility information of a scene node. 12 */ 13 class NodeInfo { 14 public: 15 NodeInfo(HierarchyNode *node, 16 const float v): 17 mNode(node), mVisibility(v) {} 18 19 protected: 20 /** pointer to the scene node */ 21 HierarchyNode *mNode; 22 /** node visibility can either be a number of visible pixels or relative 23 number of visible pixels (if the hardware queries will provide the 24 total number of ratsterized pixels */ 25 float mVisibility; 26 }; 27 28 29 /** Class storing the visibility information of a mesh. 30 */ 31 class MeshInfo { 32 public: 33 MeshInfo(Mesh *mesh, 34 const float v): 35 mMesh(mesh), mVisibility(v) {} 36 37 protected: 38 /** pointer to the scene node */ 39 Mesh *mMesh; 40 /** node visibility can either be a number of visible pixels or relative 41 number of visible pixels (if the hardware queries will provide the 42 total number of ratsterized pixels */ 43 float mVisibility; 44 }; 45 46 // this define shall be replaced by template typedef 47 #define InfoContainer std::vector 15 48 }; 16 49 17 50 18 /** Class storing the visibility information of a mesh.19 */20 class MeshVisibilityInfo {21 /** pointer to the scene node */22 Geometry *mGeometry;23 /** node visibility can either be a number of visible pixels or relative24 number of visible pixels (if the hardware queries will provide the25 total number of ratsterized pixels */26 float mVisibility;27 };28 29 /** Default container type for visibility infos */30 temlate <typename T>31 typedef vector<T> VisibilityContainer<T>;32 33 51 #endif -
trunk/VUT/GtpVisibility/include/VisibilityManager.h
r59 r65 4 4 #include "CullingManager.h" 5 5 #include "VisibilityEnvironment.h" 6 6 7 7 8 /** This namespace includes all classes which are created by the VUT (Vienna University … … 12 13 namespace GtpVisibility { 13 14 15 class QueryManager; 16 class PreprocessingManager; 17 14 18 /** This class manages all forms of visibility. It is the main 15 19 class of our visibility module and manages online occlusion culling, … … 41 45 protected: 42 46 43 CullingManager *mCullingManager; 44 VisibilityEnvironment *mVisibilityEnvironment; 45 VisibilityEnvironment::CullingManagerType mCullingManagerType; 47 CullingManager *mCullingManager; 48 QueryManager *mQueryManager; 49 PreprocessingManager *mPreprocessingManager; 50 VisibilityEnvironment *mVisibilityEnvironment; 51 VisibilityEnvironment::CullingManagerType mCullingManagerType; 46 52 }; 47 53 } // namespace GtpVisibility -
trunk/VUT/GtpVisibility/src/VisibilityManager.cpp
r59 r65 3 3 #include "CoherentHierarchicalCullingManager.h" 4 4 #include "FrustumCullingManager.h" 5 #include "DummyPreprocessingManager.h" 6 #include "DummyQueryManager.h" 5 7 6 8 namespace GtpVisibility { … … 13 15 mCullingManagerType = VisibilityEnvironment::FRUSTUM_CULLING; 14 16 mCullingManager = new FrustumCullingManager(0); 17 18 mQueryManager = new DummyQueryManager(0); 19 mPreprocessingManager = new DummyPreprocessingManager(0); 20 15 21 } 16 22
Note: See TracChangeset
for help on using the changeset viewer.