Ogre中TerrainSceneManager

转自:http://blog.csdn.net/yanonsoftware/article/details/1103665

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的对象图:

 Ogre中TerrainSceneManager

       对于RayQuery,TerrainSceneManaer使用派生的TerrainRaySceneQuery类,在执行时会调用TerrainSceneManager::intersectSegment()

更多相关文章
  • 这个需求可能比较古怪,一般Mesh我们组装好顶点,索引数据后,直接放入索引缓冲渲染就好了.但是如果有些特殊需要,如需要标注出Mesh的顶点,线,面这些信息,以及特殊显示这些信息. 最开始我想的是自己分析Mesh里的VertexData与IndexData,分析顶点时查找源码发现Ogre里本身有相关的 ...
  • 轉將3DMAX中的動畫通過OGREMAX導入OGRE中,並生成相應的骨骼動畫
    原文网址:http://blog.sina.com.cn/s/blog_818dc38e01011qau.html   原文:   原创内容转载请注明:http://weibo.com/gdexqin 程序代码的的基础在http://blog.sina.com.cn/s/blog_7c03dc6f0
  • 使用Ogre时可以通过RenderSystem_Direct3D9直接访问D3D 直接使用D3D需要安装D3D SDK,典型的为2010 June SDK 需指定包含路径: C:\Program Files (x86
  • Ogre中Mesh的載入過程詳述
    转自:http://blog.csdn.net/yanonsoftware/article
  • 转自:http://blog.csdn.net/yanonsoftware/article/details/1067265 既然前面分析Mesh(Entity,SceneNode)的渲染时已经看到了OctreeSce
  • 轉: 在Ogre中使用Havok物理引擎(源碼)
    作者:CYM 众所周知Ogre则是评价很高的一款图形渲染引擎,Havok则是世界一流的物理引擎,今天花了点时间将两者结合在了一块,做了个Demo 由于国内对Havok的研究似乎很少,网上也找不到多少资料,所以先分享一下源码.. 演示了很多棍子掉落在地上的场景   --华丽 灰色部分为暂时无用代码   ...
  • Ogre 1.8 terrain 和 paging 組件
    以下转自:http://hi.baidu.com/xocoder/item/e8d87cf53d87612b753c4cfd OGRE地形生成 OGRE可以通过两个接口来生成地形,分别是void TerrainSceneManager::setWorldGeometry( const String& ...
  • Ogre學習筆記Basic Tutorial 前四課總結
    转自:http://blog.csdn.net/yanonsoftware/article
一周排行