# OgreTerrainSceneManager.h

Go to the documentation of this file.

    00001 /*
    00002 -----------------------------------------------------------------------------
    00003 This source file is part of OGRE
    00004 (Object-oriented Graphics Rendering Engine)
    00005 For the latest info, see http://www.ogre3d.org/
    00006
    00007 Copyright (c) 2000-2005 The OGRE Team
    00008 Also see acknowledgements in Readme.html
    00009
    00010 This program is free software; you can redistribute it and/or modify it under
    00011 the terms of the GNU Lesser General Public License as published by the Free Software
    00012 Foundation; either version 2 of the License, or (at your option) any later
    00013 version.
    00014
    00015 This program is distributed in the hope that it will be useful, but WITHOUT
    00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    00018
    00019 You should have received a copy of the GNU Lesser General Public License along with
    00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
    00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
    00022 http://www.gnu.org/copyleft/lesser.txt.
    00023 -----------------------------------------------------------------------------
    00024 */
    00025 /***************************************************************************
    00026 terrainscenemanager.h  -  description
    00027 ---------------------
    00028   begin                : Mon Sep 23 2002
    00029   copyright            : (C) 2002 by Jon Anderson
    00030   email                : janders@users.sf.net
    00031
    00032   Enhancements 2003 - 2004 (C) The OGRE Team
    00033
    00034 ***************************************************************************/
    00035
    00036 #ifndef TERRAINSCENEMANAGER_H
    00037 #define TERRAINSCENEMANAGER_H
    00038
    00039 #include "OgreTerrainPrerequisites.h"
    00040 #include "OgreOctreeSceneManager.h"
    00041 #include "OgreOctreeSceneQuery.h"
    00042 #include "OgreTerrainRenderable.h"
    00043 #include "OgreTerrainPageSource.h"
    00044 #include "OgreIteratorWrappers.h"
    00045
    00046
    00047 namespace Ogre
    00048 {
    00049
    00050 class Image;
    00051
    00052 typedef std::vector < TerrainPage * > TerrainPageRow;
    00053 typedef std::vector < TerrainPageRow > TerrainPage2D;
    00054
    00056 class _OgreTerrainExport TerrainRaySceneQuery : public OctreeRaySceneQuery
    00057 {
    00058 public:
    00059     TerrainRaySceneQuery(SceneManager* creator);
    00060     ~TerrainRaySceneQuery();
    00061
    00063     void execute(RaySceneQueryListener* listener);
    00064 };
    00065
    00066
    00067
    00073 class _OgreTerrainExport TerrainSceneManager : public OctreeSceneManager
    00074 {
    00075 public:
    00076     TerrainSceneManager( );
    00077     virtual ~TerrainSceneManager( );
    00078
    00080     void setWorldGeometry( const String& filename );
    00081
    00083     virtual void _renderVisibleObjects( void );
    00084
    00086     float getHeightAt( float x, float y );
    00087
    00088
    00089     bool intersectSegment( const Vector3 & start, const Vector3 & end, Vector3 * result );
    00090
    00092     void setWorldTexture(const String& textureName);
    00094     void setDetailTexture(const String& textureName);
    00096     void setDetailTextureRepeat(int repeat);
    00098     void setTileSize(int size);
    00100     void setPageSize(int size);
    00102     void setMaxPixelError(int pixelError);
    00104     void setScale(const Vector3& scale);
    00106     void setMaxGeoMipMapLevel(int maxMip);
    00107
    00109     const String& getWorldTexture(void) { return mWorldTextureName; }
    00111     const String& getDetailTexture(void) { return mDetailTextureName; }
    00113     int getDetailTextureRepeat(void);
    00115     int getTileSize(void);
    00117     int getPageSize(void);
    00119     int getMaxPixelError(void);
    00121     const Vector3& getScale(void);
    00123     int getMaxGeoMipMapLevel(void);
    00124
    00125
    00126
    00131     void setUseTriStrips(bool useStrips);
    00134     void setUseLODMorph(bool useMorph);
    00136     void setUseVertexNormals(bool useNormals);
    00138     void setUseVertexColours(bool useColours);
    00139
    00165     void setCustomMaterial(const String& materialName);
    00184     void setCustomMaterialMorphFactorParam(const String& paramName);
    00203     void setCustomMaterialMorphFactorParam(size_t paramIndex);
    00206     void setLODMorphStart(Real morphStart);
    00207
    00211     virtual TerrainRenderable * getTerrainTile( const Vector3 & pt );
    00212
    00216     virtual TerrainPage* getTerrainPage( const Vector3 & pt );
    00217
    00230     RaySceneQuery*
    00231         createRayQuery(const Ray& ray, unsigned long mask = 0xFFFFFFFF);
    00232
    00236     Camera* createCamera( const String &name );
    00238     static const TerrainOptions& getOptions(void) { return mOptions; }
    00239
    00261     virtual bool setOption( const String &, const void * );
    00262
    00266     virtual void setPrimaryCamera(const Camera* cam);
    00268     typedef std::map<String, TerrainPageSource*> PageSourceMap;
    00269
    00271     typedef ConstMapIterator<PageSourceMap> PageSourceIterator;
    00273     PageSourceIterator getPageSourceIterator(void);
    00286     virtual void registerPageSource(const String& typeName, TerrainPageSource* source);
    00297     virtual void selectPageSource(const String& typeName,
    00298         TerrainPageSourceOptionList& optionList);
    00299
    00310     virtual void attachPage(ushort pageX, ushort pageZ, TerrainPage* page);
    00312     MaterialPtr& getTerrainMaterial(void);
    00313     // Overridden from basic scene manager
    00314     void _renderScene(Camera *cam, Viewport *vp, bool includeOverlays);
    00315
    00317     SceneNode* getTerrainRootNode(void) const { return mTerrainRoot; }
    00319     void clearScene(void);
    00321     void setWorldGeometryRenderQueue(RenderQueueGroupID qid);
    00322
    00324     void shutdown(void);
    00325
    00326
    00327 protected:
    00328
    00330     bool _checkSize( int s )
    00331     {
    00332         for ( int i = 0; i < 16; i++ )
    00333         {
    00334             printf( "Checking...%d\n", ( 1 << i ) + 1 );
    00335
    00336             if ( s == ( 1 << i ) + 1 )
    00337                 return true;
    00338         }
    00339
    00340         return false;
    00341
    00342     }
    00343
    00345     SceneNode * mTerrainRoot;
    00347     static TerrainOptions mOptions;
    00349     bool mUseCustomMaterial;
    00351     String mCustomMaterialName;
    00353     String mWorldTextureName;
    00355     String mDetailTextureName;
    00357     bool mUseNamedParameterLodMorph;
    00359     String mLodMorphParamName;
    00361     size_t mLodMorphParamIndex;
    00363     bool mPagingEnabled;
    00365     unsigned short mLivePageMargin;
    00367     unsigned short mBufferedPageMargin;
    00369     TerrainPage2D mTerrainPages;
    00370
    00372     void loadConfig(const String& filename);
    00373
    00375     void setupTerrainMaterial(void);
    00377     void setupTerrainPages(void);
    00378
    00379
    00381     PageSourceMap mPageSources;
    00383     TerrainPageSource* mActivePageSource;
    00384
    00385 };
    00386
    00387 }
    00388
    00389 #endif

Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Feb 12 12:59:53 2006