让子弹再飞一会
好的 ogre的page 本身比较复杂 层次比较多 OgreTerrain简化了其实现 
如下图:
                   ->pagedWord
                                       ->pagedWorldSection(TerrainGroup)->Terrains
pageManager->pagedWord->pagedWorldSection(TerrainGroup)->Terrains
                                      ->pagedWorldSection(TerrainGroup)->Terrains
                   .....

当然 pagedWorldSection含有page 其本身内部采用TerrainGroup的实现  
好 继续
看看ogre自带的terrain例子是个好的开始
我开始摇滚了
我们要paging 于是在terrain.h中打开#define paging(去掉注释就可以了)
编译 运行 我假设你的ogre是启用了boost thread的
好 出错了吗 没有? 靠 反正我是出错了 FileNotFound 仔细看 是没找到类似terrain0000000.dat的文件 靠靠靠
在其media下看看 是没有这个文件嘛
好的 先关掉paging 注释#define paging 编译 运行 一切OK 地形能出来 如果你保存了该地形 那么在media在会有一个类似terrain0000000000.dat的文件
好 让我们来分析下
通过查看TerrainPagedWorldSection.cpp的代码
找到函数loadPage()
我们可以看到defineTerrain(x,y)的代码 好 这个函数会默认根据x,y产生一个文件名 然后 该terrain将会从该文件中载入地形高度等信息 如果没有这个文件 当然就报错了
解决思想是先看看有没有该文件 如果没有 就使用defineTerrain(x,y,0) 即默认高度为0的一个地形
 1    void TerrainPagedWorldSection::loadPage(PageID pageID, bool forceSynchronous)
 2    {
 3        if (!mParent->getManager()->getPagingOperationsEnabled())
 4            return;
 5
 6        PageMap::iterator i = mPages.find(pageID);
 7        if (i == mPages.end())
 8        {
 9            // trigger terrain load
10            long x, y;
11            // pageID is the same as a packed index
12            mTerrainGroup->unpackIndex(pageID, &x, &y);
13            
14            Ogre::String geneFileName = mTerrainGroup->generateFilename(x,y);
15            if(Ogre::ResourceGroupManager::getSingleton().resourceExistsInAnyGroup(geneFileName))
16            {
17                mTerrainGroup->defineTerrain(x, y);
18            }

19            else
20            {
21                mTerrainGroup->defineTerrain(x,y,0.0f);
22            }

23            mTerrainGroup->loadTerrain(x, y, forceSynchronous);
24        }

25
26        PagedWorldSection::loadPage(pageID, forceSynchronous);
27    }

28
再次打开#define paging
OK OVER

posted on 2012-11-19 16:52 野猪红 阅读(290) 评论(0)  编辑 收藏 引用 所属分类: Ogre

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理