00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _PHYSICS_SIMPLETERRAIN_
00026 #define _PHYSICS_SIMPLETERRAIN_
00027
00028 #include <physics/physics>
00029 #include <physics/Terrain>
00030 #include <physics/OSGVisual>
00031 #include <osg/GeoSet>
00032
00033
00034 namespace physics {
00035
00036
00037 class SimpleTerrain : virtual public Terrain
00038 {
00039 public:
00040 SimpleTerrain(HeightField& heightfield);
00041 SimpleTerrain(const SimpleTerrain& t);
00042 virtual ~SimpleTerrain();
00043
00044 virtual String className() const { return String("SimpleTerrain"); }
00045
00046
00047 virtual Real& height(Real x, Real y) throw(std::out_of_range);
00048 virtual const Real& height(Real x, Real y) const throw(std::out_of_range);
00049
00050
00051 virtual base::Object& clone() const { return *NewNamedObj(className()) SimpleTerrain(*this); }
00052 virtual BoundingBox getBoundingBox() const;
00053 virtual BoundingSphere getBoundingSphere() const;
00054 virtual const MassProperties& getMassProperties(const Material& material) const;
00055
00056
00057 virtual const gfx::Tesselation& getTesselation(Int properties=VertexNormals) const;
00058
00059
00060 virtual CollisionModel& getCollisionModel(CollisionModel::CollisionModelType modelType) const;
00061
00062 protected:
00063 virtual osg::GeoSet& getGeoSet(Int properties=VertexNormals) const;
00064
00065 private:
00066 mutable bool massPropertiesCached;
00067 mutable MassProperties massProperties;
00068
00069 mutable gfx::Tesselation* tesselation;
00070 mutable Int properties;
00071 mutable bool tesselated;
00072
00073 mutable osg::ref_ptr<osg::GeoSet> geoSet;
00074 mutable bool geoSetCached;
00075
00076 mutable bool collisionModelCached;
00077 mutable CollisionModel* collisionModel;
00078 mutable CollisionModel::CollisionModelType modelType;
00079 };
00080
00081
00082 }
00083
00084 #endif