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

对于RayQuery,TerrainSceneManaer使用派生的TerrainRaySceneQuery类,在执行时会调用TerrainSceneManager::intersectSegment()
Ogre中TerrainSceneManager的更多相关文章
- 在Ogre中加载自己的资源包
转自:http://www.cnblogs.com/minggoddess/archive/2011/02/19/1958472.html 由于数据保护的需要,一款游戏一般都会有自己独有的资源包,这样 ...
- OGRE中Any 类型的实现
[OGRE中Any类型的实现] OGRE中实现了一个class Any,使用Any 可以在上下文中传递任意类型的数据.其本质实现原理就是通过指针. Any 只包含一个成员变量,类型为 placehol ...
- Axiom3D:Ogre中Mesh网格分解成点线面。
这个需求可能比较古怪,一般Mesh我们组装好顶点,索引数据后,直接放入索引缓冲渲染就好了.但是如果有些特殊需要,如需要标注出Mesh的顶点,线,面这些信息,以及特殊显示这些信息. 最开始我想的是自己分 ...
- Ogre 中使用OIS的两种模式
关于OIS的输入 要开始考虑游戏输入的问题了,以及开始加入CEGUI也要考虑加入输入的问题.先把OIS的输入简单回忆一下. OIS有两种输入模式:非缓冲输入以及缓冲输入. 无论用哪种输入方式,都应该有 ...
- Ogre代码学习之1——Ogre中地形lod的基础:deltaHeight的计算
Ogre的地形系统中的重要概念:高度差,英文HeightDeltas,表示某个完整细节中的顶点,在某个它被隐去的lod中被插值之后的高度和原始高度(即高度图中的高度)之差. DeltaHeight = ...
- Ogre中Mesh的加载过程详述
转自:http://blog.csdn.net/yanonsoftware/article/details/1031891 如果新开始写一个3D渲染引擎,Mesh应该是一个很好的切入点.当一个看似简单 ...
- Axiom3D:Ogre中Mesh文件格式分析(一)
在Axiom3D,或者说是Ogre的mesh的文件格式我们可能通过代码反推出相关格式,相关过程本来我是直接写的,后面发现相关流程写完后,我自己都看晕了,然后我就把一些过程用Execl整理出来,发现过程 ...
- Ogre中OIS的输入的使用
OIS的使用有两种模式:缓冲模式和非缓冲模式.非缓冲方式能处理鼠标或键盘长按的事件,实时性强缓冲方式则不能长按事件,用于非实时响应. 非缓冲输入:1.创建方式:其中 false 参数代表使用非缓冲模式 ...
- Ogre中OctreeSceneManager
转自:http://blog.csdn.net/yanonsoftware/article/details/1067265 既然前面分析Mesh(Entity,SceneNode)的渲染时已经看到了O ...
随机推荐
- 使用Visual Studio制作安装包
目 录 第1章 合并模块 3 1.1 SystemDll 3 1.1.1 收集文件 3 1.1.2 新建项目 4 1.1.3 增加自定义文件夹 4 1.1.4 设置部署位 ...
- golang为LigerUI编写简易版本web服务器
package main import ( "io/ioutil" "log" "net/http" "os" ) va ...
- python 练习 22
Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… el ...
- MySQL 加锁处理分析
1 背景 1 1.1 MVCC:Snapshot Read vs Current Read 2 1.2 Cluster Index:聚簇索引 3 1.3 2P ...
- meta viewport 详解
ViewPort <meta>标记用于指定用户是否可以缩放Web页面,如果可以,那么缩放到的最大和最小缩放比例是什么.使用ViewPort <meta>标记还表示文档针对移动设 ...
- python中的类变量、实例变量
类变量,是各个实例共享的资源,就像中央空调,只有一个,但每个房间(实例)均可享用. 实例变量,是每个实例各自分配使用的变量,每个房间(实例)都有一台空调,供自己使用. class handle(obj ...
- vs2010 ctrl+F5闪退解决方法
设置项目的属性页中的“配置属性”->“链接器”->“系统”->“子系统”->“控制台”(即增加“/SUBSYSTEM:CONSOLE”链接选项)
- EasyUI tab常用
获取选中的tab的title var tab = $('#tab_Employee').tabs('getSelected'); var t=tab.panel('options').title; t ...
- BZOJ1218 [HNOI2003]激光炸弹
题目后面写着DP就当它是DP吧.. 本来是扫描线+线段树的说,但是捏5000^2还是能过滴,于是暴力枚举正方形+所谓的DP就解决了. /******************************** ...
- 部分SIM卡被曝存安全漏洞:7.5亿部手机受牵连
7月22日消息,据国外媒体报道,一安全研究人员发现部分移动SIM卡所使用的加密方式存在一个安全漏洞,可能会导致手机被黑客远程控制. DES数据加密标准的SIM卡——DES是一种较旧的标准,目前正被部分 ...