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
一周排行
  • 首先我们应该对整个OID的定义有所了解,所有使用对象标识符的实体组成一个OID树,结构类似于Internet的域名系统,每个实体就是树中的一个节点.最上面的节点被称为根节点,边缘节点被称为叶节点,每个节点有一个名字和 ...
  • source命令用法:source FileName作用:在当前bash环境下读取并执行FileName中的命令.注:该命令通常用命令“.”来替代.如:source .bash_rc 与 . .bash_rc 是等效
  • 在 ESXi 5.x 中,swfw.sh 命令随 vm-support 支持包收集工具一起提供.swfw.sh 命令可用来识别连接到主机的硬件的固件和驱动程序版本.要运行此命令,请使用该路径: # /usr/lib/
  • ean128與code128 條形碼 算法分析
    [code128条形码组成] 除终止符(STOP)由13个模块组成外,其他字符均由11个模
  • // 记录开始运行时间 $GLOBALS['_beginTime'] = microtime(TRUE); microtime() 函数返回当前 Unix 时间戳和微秒数. 语法:microtime(get_as_f ...
  • 在KCloud上輕松“玩轉”Docker
    继CoreOS和Atomic镜像上线之后,刻通云紧跟Docker技术发展脚步,近期又推出了
  • 在.NET 4.0 的EF 中,增加了FK Associations 的功能,但是在.NET 3.5 SP1 中,仅仅支持独立的关联,这意味着FK 栏位不能作为实体的属性来使用,也就是说在使用的时候,必须创建它们之间
  •  xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题一直提示密码错误,什么原因?解决方案--改了密码之后,phpmyadmin的配置文件也得改吧.   问题 是配置文件改哪里?!!!
  • 题目大意:在一张图中,以最少的步数将a,b,c移到对应的A,B,C上去.其中,每个2x2的方格都有障礙并且不能两个小写字母同时占据一个格子. 题目分析:为避免超时,先将图中所有能联通的空格建起一张图,然后再BFS.
  • http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82839#problem/C 14年鞍山区域赛的题... 记得是当时全场过得第四多的题... 讲题的时候丽