source: GTP/trunk/Lib/Vis/Preprocessing/src/Intersectable.h @ 1077

Revision 1077, 2.2 KB checked in by mattausch, 18 years ago (diff)

worked on object space /view space partitioning

Line 
1#ifndef __INTERSECTABLE_H
2#define __INTERSECTABLE_H
3
4#include "AxisAlignedBox3.h"
5#include "Pvs.h"
6#include <set>
7
8namespace GtpVisibilityPreprocessor {
9
10struct VssRayContainer;
11class KdLeaf;
12
13class Intersectable {
14public:
15  // last mail id -> warning not thread safe!
16  // both mailId and mailbox should be unique for each thread!!!
17  static int sMailId;
18  static int sReservedMailboxes;
19  int mMailbox;
20 
21  /// unique object Id
22  int mId;
23 
24  /// universal counter
25  int mCounter;
26       
27  /// object based pvs
28  KdPvs mKdPvs;
29 
30  ViewCellPvs mViewCellPvs;
31
32  /// kd leaves that this intersectable belongs to
33  set<KdLeaf *> mKdLeaves;
34
35  enum { MESH_INSTANCE, TRANSFORMED_MESH_INSTANCE, SPHERE, VIEW_CELL, OGRE_MESH_INSTANCE };
36 
37  Intersectable():mMailbox(0) {}
38
39        void SetId(const int id) { mId = id; }
40        int GetId() { return mId; }
41       
42
43        static void NewMail(const int reserve = 1) {
44                sMailId += sReservedMailboxes;
45                sReservedMailboxes = reserve;
46        }
47       
48        void Mail() { mMailbox = sMailId; }
49        bool Mailed() const { return mMailbox == sMailId; }
50
51        void Mail(const int mailbox) { mMailbox = sMailId + mailbox; }
52        bool Mailed(const int mailbox) const { return mMailbox == sMailId + mailbox; }
53
54        int IncMail() { return ++mMailbox - sMailId; }
55
56
57    virtual AxisAlignedBox3 GetBox() const = 0;
58        virtual int CastRay(GtpVisibilityPreprocessor::Ray &ray) = 0;
59       
60        virtual bool IsConvex() const = 0;
61        virtual bool IsWatertight() const = 0;
62        virtual float IntersectionComplexity() = 0;
63 
64        virtual int NumberOfFaces() const = 0;
65        virtual int Type() const = 0;
66
67        virtual int GetRandomSurfacePoint(Vector3 &point, Vector3 &normal) = 0;
68
69        virtual int GetRandomVisibleSurfacePoint(Vector3 &point,
70                                                                                         Vector3 &normal,
71                                                                                         const Vector3 &viewpoint,
72                                                                                         const int maxTries) = 0;
73 
74        virtual ostream &Describe(ostream &s) = 0;
75       
76        virtual int GenerateSilhouetteRays(const int nrays,
77                                                                           const AxisAlignedBox3 &originBox,
78                                                                           const AxisAlignedBox3 &directionBox, VssRayContainer &rays)
79        {
80                return 0;
81        }
82
83        static bool GreaterCounter(const Intersectable *a,
84                                                         const Intersectable *b)
85        {
86                return a->mCounter > b->mCounter;
87        }
88};
89
90}
91
92#endif
Note: See TracBrowser for help on using the repository browser.