source: trunk/VUT/GtpVisibilityPreprocessor/src/Intersectable.h @ 556

Revision 556, 2.0 KB checked in by bittner, 19 years ago (diff)

debug version looking for glrenderer bug...

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