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

physics/SimpleTerrain

Go to the documentation of this file.
00001 /****************************************************************************
00002   Copyright (C)1996 David Jung <opensim@pobox.com>
00003 
00004   This program/file is free software; you can redistribute it and/or modify
00005   it under the terms of the GNU General Public License as published by
00006   the Free Software Foundation; either version 2 of the License, or
00007   (at your option) any later version.
00008   
00009   This program is distributed in the hope that it will be useful,
00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012   GNU General Public License for more details. (http://www.gnu.org)
00013   
00014   You should have received a copy of the GNU General Public License
00015   along with this program; if not, write to the Free Software
00016   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017   
00018   $Id: SimpleTerrain 1031 2004-02-11 20:46:36Z jungd $
00019   $Revision: 1.2 $
00020   $Date: 2004-02-11 15:46:36 -0500 (Wed, 11 Feb 2004) $
00021   $Author: jungd $
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   // Terrain
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   // Shape
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   // Tesselatable
00057   virtual const gfx::Tesselation& getTesselation(Int properties=VertexNormals) const;
00058 
00059   // CollisionModelProvider
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 } // physics
00083 
00084 #endif

Generated on Thu Jul 29 15:56:29 2004 for OpenSim by doxygen 1.3.6