首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 游戏天堂 > 游戏开发 > Ogre学习笔记(5):TerrainSceneManager
【标  题】:Ogre学习笔记(5):TerrainSceneManager
【关键字】:Ogre,TerrainSceneManager
【来  源】:http://blog.csdn.net/yanonsoftware/archive/2006/08/21/1103665.aspx

Ogre学习笔记(5):TerrainSceneManager

       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)00】;

       RequestPage函数目前只支持1page,它先将图象数据进行浮点数缩放,然后调用“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一个TerrainRenderableattach到这个子节点中。通过“TerrainRenderable::initialise()”来创建vb等。根据这段代码分析,TerrainPage的对象图:


 

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

 
NDS游戏与FLASH游戏:【上一篇】
关于3DMAX SDK Class_Id:【下一篇】
【相关文章】
  • Ogre学习笔记(4):OctreeSceneManager
  • Ogre学习笔记(3):Mesh的渲染流程
  • Ogre学习笔记(2):Mesh的加载
  • in progress
  • Atlas 学习之004:“UpdatePanel ”和“UpdateProgress ”使更新数据呈现动画效果
  • Ogre学习笔记(一)
  • eclipse SWT progressbar 进度条
  • Atlas学习手记(6):使用Atlas UpdateProgress控件
  • 5年后的OGRE3D,与从其中SHARED_PTR谈开
  • OGRE学习日志5
  • 【随机文章】
  • 关于main函数参数之二——c++主函数应该是void main() 还是int main()
  • 网页制作工作的重要性 尤其是网站程序员
  • Word“预览编辑”巧设置
  • 平面报表设计体验
  • 网上售书系统规格说明书
  • ATMEL公司的AT91RM9200调试手册
  • 领略MSN Explorer 9.0的“特异”功能
  • 将DISCUZ论坛进行到底
  • 《传奇3》回望武器升级!
  • 1994年4月全国计算机等级考试二级C语言试题(含答案)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.