来源:http://sxoo0305.blog.163.com/blog/static/10132887200911555816746/
Plsm2使用方法
注意:在看本文前,请先确认你已经看过前边的plsm2环境搭建,并且搭建成功。
下面以要加载一副名为gcanyon_height_4k2k(4097*2049)尺寸的高程图为例子。
1. 填写地图配置文件以及分割文件。
注意:下边的操作均在Samples\Media\paginglandscape2\terrains目录下操作。
打开gcanyon_height_4k2k.gen.cfg文件,如下做出配置:
GroupName=PLSM2 //指定地图所在的资源组
LandScapeFileName=gcanyon_height_4k2k //指定要分割的文件名
TextureStretchFactor=1 //指定纹理缩放因子,当纹理大小和地图不一样时使用
OutDirectory=LandScapeFileName //指定输出文件夹得名称
PageSize=513 //指定每个page的大小
TileSize=65 //指定每个tile的大小
ColorMapName=gcanyon_texture_4k2k.png //指定对应的纹理贴图
ColorMapSplit=yes //地图是否分割
HeightMap=yes //指定地图的格式
MiniMap=yes //指定是否生成最小图以及他的尺寸
MiniMapWidth=256
MiniMapHeight=256
完成地图的分割文件的配置,下边将该配置文件名加入maptool.cfg文件中给mapsplitter指定要分割的地图配置文件。如下:
DefaultMap=test //指定默认的分割地图
Test=gcanyon_height_4k2k.gen.cfg //这样做个字符替换,可以列出很多地图
…… 其他的地图
# resource group name //指定资源组
GroupName=PLSM2
#do you want to run it on all maps listed here
BatchMode=no //指定除了默认的地图外,其他的地图是否也分割
好了,下边配置TerrainGenerator.cfg文件,该文件告诉mapspliter将生成的地图存放在哪个文件夹里边,高度图以及材质贴图在哪里,如下设置:
HeightMapFolder=datasrcs
ColorMapFolder=datasrcs
OutputFolder=terrains
OK,完成以后就可以运行bin目录的下的mapspliter.exe。生成分割图,完成后可以在terrain中看到对应的文件夹。里边存放的时对应的分割后的地图。
下面就是将分割后的地图载入程序了。
首先保证ogre的正常的程序结构可以运行。然后做如下修改:打开工程属性,在连接器选项里边的输入项加入Plugin_PagingLandScapeSceneManager2_d.lib
并且拷贝Plugin_PagingLandScapeSceneManager2_d.dll到bin/debug运行目录下。
完成后候就需要配置gcanyon_height_4k2k.cfg 文件,如下:
GroupName=PLSM2 //资源组
LandScapeFileName=gcanyon_height_4k2k //指定地图文件
FileSystem=LandScapeFileName
Width=8 //地图被分割后的横向
Height=4 //纵向的块数。
可以根据地图的尺寸和设定的page的大小计算得到
ScaleX=90000 //地图的尺寸在世界中表示的坐标的范围。计算公
ScaleY=30000 式详细参见后文的辅助说明
ScaleZ=90000
TextureStretchFactor=1 //指定纹理缩放因子
TextureFormatSupported0=ImagePaging
TextureFormat=ImagePaging //指定纹理贴图以及各式
ImageFilename=gcanyon_texture_4k2k
# where to put camera on load. //指定摄像机的在世界中的坐标
BaseCameraViewpoint.x=-4702.0f
BaseCameraViewpoint.y=250245.0f
BaseCameraViewpoint.z=-19140.0f
Baselookat.x=0.0f //指定朝向
Baselookat.y=0.0f
Baselookat.z=0.0f
以上是基本的必须的参数,其他的参数请参考
plsm2的目录结以及配置文件说明.doc文档。
配置完以后,下边配置pageinglandscapescnemanager.cfg文件,该文件时插件要读取的文件,文件名可以不唯一,根据代码修改,做如下配置:
DefaultMap=grand_canyon //指定要家在地地形图#
grand_canyon=gcanyon_height_4k2k
# resource group name where to find map definition //指定资源组
GroupName=PLSM2
# Try forbidden textureformat combinations
TextureFormatDebug=no //是否开启纹理混合
同前边的一样,详细的配置参数参看plsm2的目录结以及配置文件说明.docx
Ok,配置部分完成。下边修改代码:
1.在程序头文件中加入对应的头文件PagingLandScapeSceneManager.h.
2.将mSceneMgr = mRoot->createSceneManager(ST_EXTERIOR_CLOSE)中的ST_EXTERIOR改为ST_EXTERIOR_REAL_FAR,表示加载plsm场景管理器。
(注意:如果这里在代码运行时提示场景管理器类型错误的话,则要手动加载plsm插件)
3.将mSceneMgr->setWorldGeometry("terrain.cfg");中的参数改为
Ogre::string(“paginglandscape2.cfg”).加载地形;
之后编译运行程序,如果以上顺利,就可以进入程序了。当然会有很多问题。但是基本的流程就是这样。根据错误多到论坛看看。多google下!
下面是配置文件中的一些参数的换算关系
一.地形图和世界坐标系之间的关系
大地形高程图大小: 16385×16385
块大小(PageSize): 513
Width, Height: 32
ScaleX, ScaleZ: 204800 (204800=(513-1)×400)
那么,PLSM2三维世界坐标系的大小是(SizeX, SizeZ) = 32×512×400 = (6553600, 6553600)
那么,PLSM2三维世界坐标系的左上角的坐标是(MinX, MinZ) = -6553600/2 = (-3276800, -3276800)
二.地形图和实际场景尺寸之间的关系
16385*16385高程图表示的实际范围的换算方法:
x = (16385 - 1)*4 = 65536
那么x就是65536m*65536m的地图就是65km*65km的地图。