Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_SCENE_PORTAL_H__
00009 #define __SP_SCENE_PORTAL_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013
00014 #ifdef SP_COMPILE_WITH_SCENEGRAPH_PORTAL_BASED
00015
00016
00017 #include "Base/spViewFrustum.hpp"
00018
00019
00020 namespace sp
00021 {
00022 namespace scene
00023 {
00024
00025
00026 class Sector;
00027
00033 class SP_EXPORT Portal
00034 {
00035
00036 public:
00037
00038 Portal();
00039 ~Portal();
00040
00041
00042
00047 Sector* getNeighbor(Sector* SectorObj) const;
00048
00050 bool connected(Sector* SectorObj) const;
00051
00053 bool connected() const;
00054
00056 bool insideViewFrustum(const ViewFrustum &Frustum) const;
00057
00059 bool transformViewFrustum(const dim::vector3df &ViewOrigin, ViewFrustum &Frustum) const;
00060
00062 void setTransformation(const dim::matrix4f &Transform);
00064 dim::matrix4f getTransformation() const;
00065
00066
00067
00069 inline void setEnable(bool Enable)
00070 {
00071 Enabled_ = Enable;
00072 }
00074 inline bool getEnable() const
00075 {
00076 return Enabled_;
00077 }
00078
00080 inline void setFrontSector(Sector* SectorObj)
00081 {
00082 FrontSector_ = SectorObj;
00083 }
00085 inline Sector* getFrontSector() const
00086 {
00087 return FrontSector_;
00088 }
00089
00091 inline void setBackSector(Sector* SectorObj)
00092 {
00093 BackSector_ = SectorObj;
00094 }
00096 inline Sector* getBackSector() const
00097 {
00098 return BackSector_;
00099 }
00100
00106 inline const dim::vector3df& getPoint(u32 Index) const
00107 {
00108 return Points_[Index];
00109 }
00110
00111 protected:
00112
00113 friend class Sector;
00114
00115
00116
00121 bool connect(Sector* SectorObj);
00122
00127 bool disconnect(Sector* SectorObj);
00128
00129 private:
00130
00131
00132
00133 enum ERectPoints
00134 {
00135 RECTPOINT_LEFTUP = 0,
00136 RECTPOINT_LEFTDOWN,
00137 RECTPOINT_RIGHTUP,
00138 RECTPOINT_RIGHTDOWN,
00139 };
00140
00141
00142
00147 void transformViewFrustumPlane(
00148 dim::plane3df &Plane, const dim::vector3df &ViewOrigin,
00149 const ERectPoints CornerA, const ERectPoints CornerB,
00150 const ERectPoints OpCornerA, const ERectPoints OpCornerB,
00151 s32 &TransformCounter
00152 ) const;
00153
00154
00155
00156 dim::matrix4f InvTransform_;
00157 dim::vector3df Points_[4];
00158
00159 bool Enabled_;
00160
00161 Sector* FrontSector_;
00162 Sector* BackSector_;
00163
00164 };
00165
00166
00167 }
00168
00169 }
00170
00171
00172 #endif
00173
00174 #endif
00175
00176
00177
00178