Ogre TerrainSceneManager
2011-08-20 19:46
387 查看
TerrainSceneManager是一个OctreeSceneManager的派生类,并且是在同一个Plugin工程中。
通过调用void TerrainSceneManager::setWorldGeometry( const String& filename )来加载一个地形,参数为一个配置文件的文件名。配置文件中主要有:
WorldTexture=terrain_texture.jpg
PageSource=Heightmap
Heightmap.image=terrain.png等等。
第一步为加载config文件:
void TerrainSceneManager::loadConfig(DataStreamPtr& stream)
àTerrainSceneManager::selectPageSource()【此函数先是根据typeName找到对应的PageSource,然后赋值给mActivePageSource,然后调用mActivePageSource->initialize()】;
à目前此class只支持HeightmapTerrainPageSource类:HeightmapTerrainPageSource::initialise();
àHeightmapTerrainPageSource::loadHeightmap()【将height map读入到mRawData或者mImage中,视mIsRaw而定】
第二步:void TerrainSceneManager::initLevelIndexes();
第三步:resize( AxisAlignedBox( 0, 0, 0, max_x, max_y, max_z ) );
第四步:void TerrainSceneManager::setupTerrainMaterial(void);
第五步:void TerrainSceneManager::setupTerrainPages(void)
先是创建了一个名为“Terrain”的root节点的子节点;然后初始化了TerrainPage2D mTerrainPages;最后void HeightmapTerrainPageSource::requestPage(ushort x, ushort y)【0,0】;
RequestPage函数目前只支持1个page,它先将图象数据进行浮点数缩放,然后调用 “TerrainPageSource::firePageConstructed()”通知Listener;然后调用“TerrainPage* TerrainPageSource::buildPage(Real* heightData, const MaterialPtr& pMaterial)”创建一个新的TerrainPage对象,并创建渲染需要的数据,然后调用void TerrainSceneManager::attachPage(ushort
pageX, ushort pageZ, TerrainPage* page)加入到mTerrainPages中,然后调用 “mTerrainRoot->addChild(page->pageSceneNode);”加入到SceneGraph中。
其中TerrainPageSource::buildPage()是一个比较核心的函数。它首先new了一个TerrainPage对象,然后创建了一个scenenode:“page->pageSceneNode = mSceneManager->createSceneNode(name);”,然后每次循环创建一个子SceneNode,并且new一个 TerrainRenderable,attach到这个子节点中。通过“TerrainRenderable::initialise()”来创建vb 等。根据这段代码分析,TerrainPage的对象图:
对于RayQuery,TerrainSceneManaer使用派生的TerrainRaySceneQuery类,在执行时会调用TerrainSceneManager::intersectSegment()
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangwang123654/archive/2009/12/10/4977530.aspx
通过调用void TerrainSceneManager::setWorldGeometry( const String& filename )来加载一个地形,参数为一个配置文件的文件名。配置文件中主要有:
WorldTexture=terrain_texture.jpg
PageSource=Heightmap
Heightmap.image=terrain.png等等。
第一步为加载config文件:
void TerrainSceneManager::loadConfig(DataStreamPtr& stream)
àTerrainSceneManager::selectPageSource()【此函数先是根据typeName找到对应的PageSource,然后赋值给mActivePageSource,然后调用mActivePageSource->initialize()】;
à目前此class只支持HeightmapTerrainPageSource类:HeightmapTerrainPageSource::initialise();
àHeightmapTerrainPageSource::loadHeightmap()【将height map读入到mRawData或者mImage中,视mIsRaw而定】
第二步:void TerrainSceneManager::initLevelIndexes();
第三步:resize( AxisAlignedBox( 0, 0, 0, max_x, max_y, max_z ) );
第四步:void TerrainSceneManager::setupTerrainMaterial(void);
第五步:void TerrainSceneManager::setupTerrainPages(void)
先是创建了一个名为“Terrain”的root节点的子节点;然后初始化了TerrainPage2D mTerrainPages;最后void HeightmapTerrainPageSource::requestPage(ushort x, ushort y)【0,0】;
RequestPage函数目前只支持1个page,它先将图象数据进行浮点数缩放,然后调用 “TerrainPageSource::firePageConstructed()”通知Listener;然后调用“TerrainPage* TerrainPageSource::buildPage(Real* heightData, const MaterialPtr& pMaterial)”创建一个新的TerrainPage对象,并创建渲染需要的数据,然后调用void TerrainSceneManager::attachPage(ushort
pageX, ushort pageZ, TerrainPage* page)加入到mTerrainPages中,然后调用 “mTerrainRoot->addChild(page->pageSceneNode);”加入到SceneGraph中。
其中TerrainPageSource::buildPage()是一个比较核心的函数。它首先new了一个TerrainPage对象,然后创建了一个scenenode:“page->pageSceneNode = mSceneManager->createSceneNode(name);”,然后每次循环创建一个子SceneNode,并且new一个 TerrainRenderable,attach到这个子节点中。通过“TerrainRenderable::initialise()”来创建vb 等。根据这段代码分析,TerrainPage的对象图:
对于RayQuery,TerrainSceneManaer使用派生的TerrainRaySceneQuery类,在执行时会调用TerrainSceneManager::intersectSegment()
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangwang123654/archive/2009/12/10/4977530.aspx
相关文章推荐
- Ogre TerrainSceneManager
- Ogre中TerrainSceneManager
- Ogre学习笔记(4):OctreeSceneManager
- Ogre OctreeSceneManager
- Ogre学习笔记(5):TerrainSceneManager
- Ogre BspSceneManager
- Ogre BspSceneManager
- Ogre OctreeSceneManager
- [转]Ogre学习笔记 BspSceneManager
- Ogre OcttreeSceneManager
- ogre3D学习基础15 -- 创建BSP Scene Manager
- Terrain Scene Manager
- Ogre Entity/Mesh/SceneNode/SceneManager基本概念
- Ogre::OctTreeSceneManager 阅读心得
- Ogre中设置.scene文件中所有实体、子实体以及各个LOD层级的材质
- (转)OGRE根据高度图创建Terrain地形流程分析
- [Error]world geometry is not supported by the generic scenemanager
- OGRE - Terrain Shadow ,整合OGRE的地形和PSSM+LiSPSM阴影算法
- ogre实现加入物理效果terrain
- OGRE基础教程八 Multiple and Dual SceneManagers