博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ogre中TerrainSceneManager
阅读量:5237 次
发布时间:2019-06-14

本文共 1814 字,大约阅读时间需要 6 分钟。

转自:

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()

转载于:https://www.cnblogs.com/hnfxs/p/3185377.html

你可能感兴趣的文章
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>