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
一周排行
  • 1.[[email protected]~]#cp /user/local/apache2/bin/apachectl /etc/init.d/httpd 2.[[email protected]~]#vim /etc/init.d/httpd 行
  • replace(param1,param2,param3) param1 正则表达式:param2 将匹配的字符替换成指定字符:param3 模式 param3 参数如下  模式  i   r   m   s   c
  • TCP Wrapper & Samba 1.TCP Wrapper 一般在操作系统层面上安装防火墙来处理网络连接,然而虽然防火墙有非常广泛的用途,但他却不是万能的,例如它无法处理类似的向连接发起者发送一些文本 ...
  • 转自:http://blog.csdn.net/somebodydie/article/details/8229343 package com.jaky;   import java.util.*;   public
  • 功能:实现点击时下拉框显示 插件:dropdown.js 要点:dropdown功能往往用在导航栏.导航条上,用作标题显示.dropdown与<ul><li>标签搭配用.         以d ...
  • 前言:端口回流的意思 比如我内网有一台FTP服务器,对外网做了端口映射,让外网可以访问这个端口,并进行上传.端口回流本来是一种路由器的容错机制,当信息到达端口若无法正常传输就会阻塞甚至回流,现需要让端口从本地内网对本 ...
  • 0.前期准备修改主机名.ip.iptables关闭:时间同步:ntpdate -s time.windows.com;软件准备ganglia-3.7.1.tar.gz.ganglia-web-3.7.0.tar.gz
  • Transact_SQL --语 句 功 能 --数据操作 SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据
  • 开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的查询通过不了.
  • Redhat Linux 的 GConf error 解决辦法 问题: 不小心执行了: #chmod -R 0777 /tmp ,导致重新进入Redhat后出现GConf error:Failed to contac