在我的某篇日志中,说过PLSM2能使用的地图需要事先分割,形成Pages。下面介绍PLSM2源码包中的免费地图分割工具Tool_MapSplitter的使用方法。(关于该工具源码中的一个Bug的介绍及修正方法见我的另一篇日志)
该工具在运行时,需要有几个配置文件:1、resources.cfg,该文件告诉Tool_MapSplitter跟地图相关的资源在什么位置;2、maptool.cfg,该文件告诉工具,我们有哪些(个)地图需要分割;3、TerrainGenerator.cfg,该文件里面包含了地图所使用的原始高度图或者纹理在什么地方,以及分割后输出到哪里。
我们一般把resources.cfg放到APP所在的bin/release下,那里有APP的资源配置文件resources.cfg。另外两个不一定要和工具放一起,但是工具必须能够从resource.cfg中的配置中找到这两个文件存放的目录。
下面看看Tool_MapSplitter工程的部分源代码:
int main(int argc, char **argv)
{ //注意,该工具不接受命令行输入
Ogre::MapUtil *MapPrecompute = new Ogre::MapUtil (); //这里实例化一个MapUtil对象
MapPrecompute->Load();//加载地图
MapPrecompute->process ();//处理:分割。会在cmd窗口中显示一大堆信息
delete MapPrecompute; //释放
}
代码是不是很清晰?
void MapUtil::Load()
{
#ifndef _MAPEDITOR
init();//读resource.cfg
mOptions = new PagingLandScapeOptions(0);
mOptions->cfgGroupName = String("PLSM2");
mOptions->load(String("maptool.cfg"));//读maptool.cfg
#endif //_MAPEDITOR
}
来看看maptool.cfg文件里有什么(注意,该文件可能不在当前目录下,media/paginglandscape2下):
DefaultMap=European_Alpes
European_Alpes=Alpes.gen
TSMTerrain=TsmTerrain.gen
hf_129_3=hf_129_3.gen
puget_sound=puget_1k.gen
gcanyon_height_4k2k=gcanyon_height_4k2k.gen
terragen_genrated=terragen16bits.gen
# resource group name
GroupName=PLSM2
#do you want to run it on all maps listed here
BatchMode=yes
蓝色部分是所有需要分割的地图列表(对应配置文件),=后面是分割的配置文件,告诉工具怎么分割地图。例:
hf_129_3=hf_129_3.gen 是说有个地图配置hf_129_3.cfg,该地图的分割设置在hf_129_3.gen.cfg里。
在hf_129_3.cfg中有LandScapeFileName=hf129_3,说明了该地图使用的原始高度图为hf129_3文件(例:hf129_3.png)。
但是工具软件是怎么找到hf129_3.png的呢?原来在maptool.cfg同级目录下,有个TerrainGenerator.cfg:
HeightMapFolder=datasrcs
ColorMapFolder=datasrcs
OutputFolder=terrains
里面的内容你一看便知。至于工具在分割地图时的具体操作,要依据地图的配置文件里面的设置来确定,但是分割的结果就是为每幅地图形成一个文件夹,里面是生成的“一套”文件。
这“一套”文件一起描述了你配置的一幅地图的分割结果,PLSM2可以通过paginglandscape2.cfg(名字不一定要是paginglandscape2.cfg)直接加载该地图。
祝你好运。