Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

PhxTerrainDatabase.h

Go to the documentation of this file.
00001 #ifndef PHX_TERRAIN_DATABASE_H
00002 #define PHX_TERRAIN_DATABASE_H
00003 
00004 #include <Phx/Graphics/PhxTerrainGeometry.h>
00005 #include <Phx/Util/PhxBuffer.h>
00006 #include <Phx/Util/PhxRectangle.h>
00007 
00014 namespace Phx {
00015 
00050   class GraphicsEngine::TerrainGeometry::TerrainDatabase : 
00051     public LockedPtrInterface<TerrainDatabase> {
00052   public:
00053     
00058     typedef uint64_t QuadIdentifier;
00059 
00060     typedef uint32_t ChildIndex;
00061     const static ChildIndex LL = 0;
00062     const static ChildIndex UL = 1;
00063     const static ChildIndex LR = 2;
00064     const static ChildIndex UR = 3;
00065     const static ChildIndex CHILD_COUNT = 4;
00066 
00070     const static QuadIdentifier INVALID_IDENTIFIER = ((uint64_t)-1);
00071 
00084     const static uint32_t ROOT_IDENTIFIER_BITS = 24;
00085 
00090     const static uint32_t QUAD_IDENTIFIER_BITS = 64 - ROOT_IDENTIFIER_BITS;
00091 
00103     const static QuadIdentifier MIN_ROOT_IDENTIFIER = ((uint64_t)1)<<(ROOT_IDENTIFIER_BITS-2);
00104 
00116     const static QuadIdentifier MAX_ROOT_IDENTIFIER = (((uint64_t)1)<<ROOT_IDENTIFIER_BITS)-1;
00117 
00122     static inline bool isRootIdentifier(QuadIdentifier identifier) {
00123       return !(identifier & ~MAX_ROOT_IDENTIFIER);
00124     }
00125 
00142     static inline QuadIdentifier rootIdentifier(QuadIdentifier quad) {
00143       while (!isRootIdentifier(quad)) { quad >>= 2; }
00144       return quad;
00145     }
00146     
00153     static inline QuadIdentifier childIdentifier(QuadIdentifier parent, ChildIndex c) {
00154       return (parent << 2)|c;
00155     }
00156 
00167     static inline QuadIdentifier parentIdentifier(QuadIdentifier quad) {
00168       if (isRootIdentifier(quad)) return INVALID_IDENTIFIER;
00169       return quad>>2;
00170     }
00171 
00180     static Rectangle<float> uvCoords(QuadIdentifier identifier);
00181 
00202     virtual Vector3 rootCorner(QuadIdentifier identifier, ChildIndex which) = 0;
00203 
00220     virtual double ellipsoidRadius(const Vector3& v) = 0;
00221 
00222     // Heights are floating point values.
00223     typedef float HeightValue;
00224 
00225     // must return resolution*resolution-sized buffer.
00226     virtual Ptr<const Buffer<HeightValue> > newHeightBuffer(QuadIdentifier identifier,
00227                                                             uint32_t resolution) = 0;
00228 
00229     // must return resolution*resolution*3-sized buffer.
00230     virtual Ptr<const Buffer<uint8_t> > newColorBuffer(QuadIdentifier identifier, 
00231                                                        uint32_t resolution) = 0;
00232 
00233     // must return resolution*resolution-sized buffer.
00234     virtual Ptr<const Buffer<uint8_t> > newBandBuffer(QuadIdentifier identifier, 
00235                                                       const String& band, uint32_t resolution) = 0;
00236 
00237   };
00238 
00248   class GraphicsEngine::TerrainGeometry::TerrainDatabaseDescription : 
00249     public Description {
00250   public:
00251     static const Description::Type DESCRIPTION_TYPE;
00252     static const String DESCRIPTION_TYPE_NAME;
00253   };
00254   
00255 }; // namespace Phx
00256 
00257 #endif /* PHX_TERRAIN_DATABASE_H */

Generated on Mon Jul 10 19:45:29 2006 for Phoenix OSFS by  doxygen 1.4.2