plsm2使用手记

541 篇文章 26 订阅

一.准备

1.      OGRE3D-1.6.4源码以depence.

2.      Microsoft DirectX SDK (March 2009).

3.      PLSM2源码(http://tuan.kuranes.free.fr/Ogre.html).

4.      VS2008(sp1).

5.      PLSM2在OGRE3D上的官方论坛

http://www.ogre3d.org/wiki/index.php/Paging_Scene_Manager#Installation

 

二.安装

1.      搭建OGRE3D环境,一定要用本机从源码编译生成库。

2.      编译PLSM2工程。

2.1.从ogre的svn上下载plsm的源码后,文件目录如下:

       

 

将上述文件夹中的内容拷贝到OGRE的plsm2文夹中,如D:/OGERsdk/plsm2,然后 打开plsm2.sln.工程并打开属性页面做如下设置:      

在Plugin_pagingLandScanpeScenemanager中:  打开属性->连接器-输入,在附加依赖项中添加Plugin_OctreeSceneManager_d.lib。同时在c++->预处理器中加入_PLSM_OCTREE一项,然后编译生成dll.

             在上边的插件生成以后, 在Demo_PagingLandScape2中打开属性->接器-输->附加依赖项 加入OIS_d.lib 以及Plugin_PagingLandScapeSceneManager2_d.lib

             然后打开项目依赖项->项目依赖。取消所有项目依赖。编译生成。

            

             然后直接编译生成Tool_mapsplitter工程,得到exe文件,并拷贝至plsm2/Samples/Common/bin/Debug目录中。

            

             好了,编译成功了。当你点击调试或运行时提示无法找到ogreman_d.dll。下

要拷贝dll到plsm的运行环境中。

 

2.2.拷贝ogre的运行时环境到plsm运行环境中。

              从ogre目录下的bin/debug下拷贝所有的dll到plsm2/sample/commom/bin/debug下,同时修改该目录下的plugin.cfg和plugin_plsm2.cfg文件中的插件的名字。(注意:plugin_paginglansscape工程生成的debug版的dll和release版的名字是一样的)。

         2.3.拷贝完运行时还不能运行,下边拷贝资源。

              将ogre的media下的所有资源文件夹拷贝纸ogresdk/plsm2/samples/media下。然后从http://tuan.kuranes.free.fr/datasrcs.zip 这里下载一些plsm用到的地图文件。解压后将里边的地图文件拷备至plsm2/Samples/Media/paginglandscape2/datasrcs下。并修改sample/common/bin/debug下的resource.cfg和plsm_resource.cfg文件,将这些资源加入plsm2资源组中。如下所示:

              # Resource locations to be added to the 'boostrap' path

# This also contains the minimum you need to use the Ogre example framework

[Bootstrap]

Zip=../../../Media/packs/OgreCore.zip

 

# Resource locations to be added to the default path

[General]

FileSystem=../../../Media

FileSystem=../../../Media/fonts

FileSystem=../../../Media/materials/programs

FileSystem=../../../Media/materials/scripts

FileSystem=../../../Media/materials/textures

FileSystem=../../../Media/models

FileSystem=../../../Media/overlays

FileSystem=../../../Media/particle

FileSystem=../../../Media/gui

FileSystem=../../../Media/DeferredShadingMedia

Zip=../../../Media/packs/cubemap.zip

Zip=../../../Media/packs/cubemapsJS.zip

Zip=../../../Media/packs/dragon.zip

Zip=../../../Media/packs/fresneldemo.zip

Zip=../../../Media/packs/ogretestmap.zip

Zip=../../../Media/packs/skybox.zip

 

[PLSM2]

FileSystem=../../../Media/paginglandscape2

 

FileSystem=../../../Media/paginglandscape2/gui

FileSystem=../../../Media/paginglandscape2/fonts

FileSystem=../../../Media/paginglandscape2/models

FileSystem=../../../Media/paginglandscape2/overlays

FileSystem=../../../Media/paginglandscape2/materials

FileSystem=../../../Media/paginglandscape2/materials/scripts

FileSystem=../../../Media/paginglandscape2/materials/textures

FileSystem=../../../Media/paginglandscape2/materials/programs

 

FileSystem=../../../Media/paginglandscape2/datasrcs

FileSystem=../../../Media/paginglandscape2/terrains

 

注意:resource.cfg和plsm_resource.cfg中都要修改。

 

如上都设置好以后,demo还不能运行,因为还没有生成demo所需要的地图文件,下边介绍如何分割地图。

2.4.分割地图:

在plsm2/Samples/Media/paginglandscape2中找到maptool.cfg文件,该文件是mapspitter.exe需要读取的配置文件,告诉他分割那些地图。

DefaultMap=European_Alpes

 

European_Alpes=Alpes.gen

TSMTerrain=TsmTerrain.gen

hf_129_3=hf_129_3.gen

# need to download datasrc.zip from http://tuan.kuranes.free.fr/ogre.html for those

puget_sound=puget_1k.gen

grand_canyon=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

如上所示,将文件中的DefaultMap=后边改为European_Alpes。

之后运行plsm2/Samples/Common/bin/Debug目录下的的MapSplitterD

     进行地图分割。程序在命令行会输出一些信息,根据地图的数目时间不同。

 

生成完成以后,打开plsm2/Samples/Media/paginglandscape2/terrains可以看到生成的文件,在alpes文件夹中就是本次被分割的地图的文件。

2.5.运行demo。

        如上地图生成好以后,打开plsm2/Samples/Media/paginglandscape2目录下的paginglandscape2.cfg文件,如下,

DefaultMap=European_Alpes

 

European_Alpes=Alpes

Terrain_Scene_Manager_Terrain=TsmTerrain

hf=hf_129_3

 

# need to download datasrc.zip from http://tuan.kuranes.free.fr/ogre.html for those

puget_sound=ps_height_1k

grand_canyon=gcanyon_height_4k2k

terragen_genrated=terragen16bits

 

#NewWorld2=NewWorld2

#alfons_1k=alfons_1k

#startingIsland=startingIsland

 

# resource group name where to find map definition

GroupName=PLSM2

 

# Try forbidden textureformat combinations

TextureFormatDebug=no

将第一项改为上边所示。表示加载Alpes地图.

 

Ok,基本完成,运行plsm2/Samples/Common/bin/Debug下的

Demo_PagingLandScape2。可以看到效果了。这里,plsm2的基本的运行环境已经搭建完毕了。

 

因为每个人的开发环境不尽相同,所以中间肯定会有很多不同的地方。多多参看官方wiki。

http://www.ogre3d.org/wiki/index.php/Paging_Scene_Manager#Installation

 

从网上下载plsm2的最新svn版本后,配置好环境,直接编译工程就会得到pslm2的最新版本

如上图所示,是plsm2在ogre1.64版本下的目录结构,下边给出结构说明:

 

Dll-就是1.64的所有的Dll库,其中包含一个Plugin_PagingLandScapeSceneManager2_d.dll文件,就是plsm2的动态库,

Exe-注意MapSpitterD.exe,他就是plsm的地图分割工具,.

Cfg-看到,这里有很多cfg,注意带plsm2的cfg文件,是plsm插件在运行的时候需要读取的.而里边的和ogre目录相同的cfg文件就是MapSplittr.exe所使用的.plsm2display.cfg对应的是ogre.cfg文件.同时看到paginglandscape2.cfg文件.对应的是tsm场景管理其中的terrain.cfg文件.

 

Ok,大体目录介绍完了,下边介绍下资源目录,如下图所示

# Resource locations to be added to the default path

[General]

FileSystem=../Media

FileSystem=../Media/fonts

FileSystem=../Media/materials/programs

FileSystem=../Media/materials/scripts

FileSystem=../Media/materials/textures

FileSystem=../Media/models

FileSystem=../Media/overlays

FileSystem=../Media/particle

FileSystem=../Media/gui

FileSystem=../Media/DeferredShadingMedia

Zip=../Media/packs/cubemap.zip

Zip=../Media/packs/cubemapsJS.zip

Zip=../Media/packs/dragon.zip

Zip=../Media/packs/fresneldemo.zip

Zip=../Media/packs/ogretestmap.zip

Zip=../Media/packs/skybox.zip

 

[PLSM2]

FileSystem=../Media/paginglandscape2

 

FileSystem=../Media/paginglandscape2/gui

FileSystem=../Media/paginglandscape2/fonts

FileSystem=../Media/paginglandscape2/models

FileSystem=../Media/paginglandscape2/overlays

FileSystem=../Media/paginglandscape2/materials

FileSystem=../Media/paginglandscape2/materials/scripts

FileSystem=../Media/paginglandscape2/materials/textures

FileSystem=../Media/paginglandscape2/materials/programs

 

FileSystem=../Media/paginglandscape2/datasrcs

FileSystem=../Media/paginglandscape2/terrains

 

这是我的resource.cfg和plsm2-resource.cfg里边的代码.gemeral就不说了,看plsm分组,这个

分组主要是plsm2用到的资源分组.,好,我们进入底层木木如下:

 

Datasrcs-存储将要分割的地图.

Terrains-存储分割后的地图.其中里边还要存储分割时MapSpitter所需要的一些配置文件.

再看cfg文件:

Maptool-是Mapspitter的配置文件,告诉他哪些地图需要分割.

Pageinglandscape2-和主目录中的那个一样,这里多了一个.

TerainGerate-告诉Mapspitter去哪里找地图和贴图以及输出目录.

其他的文件夹都是一些资源目录,注意,上边的几个cfg文件都必须能够让mapspitter和demo通过resource.cfg和plsmresource.cfg文件找到.他们的位置可以是任意的.

 

在看下terrains目录:

 

 

 

一开始里边是没有文件夹得,都是cfg文件.就是datasrcl里边的地图的配置文件,每个地图有2个配置文件,不带gen的是plsm读取的,带gen的是mapspitter读取的.他根据他来分割地图.

而那些文件夹是mapspitter运行后生成的输出目录.里边是被分割后的地图.

 

 

 

 

 

 

大体的文件结构完了,下面说下plsm程序的基本流程:

先说一下mapspitter地图分割工具

 

PLSM2能使用的地图需要事先分割,形成Pages。

    该工具在运行时,需要有几个配置文件: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

    里面的内容你一看便知。至于工具在分割地图时的具体操作,要依据地图的配置文件里面的设置来确定,但是分割的结果就是为每幅地图形成一个文件夹,里面是生成的“一套”文件。

  好,mapspitter大体明白了,下边就是运行demo了,配置好前边说的那些,demo就基本可是运行起来了.

 

重点:

  下边就详细的讲解一下各种配置文件的格式以及每一项代表的意思.

 

·         目录

·         1 介绍

·         2 地图选择配置

·         2.1 maptools.cfg

·         2.2 paginglandscape2.cfg

·         3 地图定义细节

·         3.1 公用配置选项(maptools.cfg和paginglandscape2.cfg)

·         3.1.1 地图定义

·         3.2 地图分割专用配置

·         3.2.1 高度图定义

·         3.2.2 数据源

·         3.2.3 纹理

·         3.3 运行时配置(Plugin配置)

·         3.3.1 分页选项

·         3.3.2 数据源定义

·         3.3.3 材质定义

·         3.3.4 更多选项

·          

介绍

    在继续之前,请留意 Paging Scene Manager 里的相关内容。

    后面提到的配置文件在OGRE中均是以".cfg"为扩展名的文本文件。各个配置项在配置文件里以"键=值"的形式存在,例如:"ImageSplit=yes"。对于二选一类型的选项采用了'yes' 或 'no'作为设置值。在配置文件中,各配置选项的书写次序无关紧要,但是以字符串形式出现的配置项的大小写形式很重要(大小写敏感)。

    对于每一幅地图,你必须有2个配置文件,类似于XXX.cfg和XXX.gen.cfg的形式。前一格在PLSM加载地图的时候必须用到,后一个在工具软件对地图进行分页时用到。

    在创建一幅新的地图(假设是4096x4096像素尺寸的地图)时,为了使PLSM能够将它渲染出来,你需要做以下几件事:

4.     首先,你需要定义一个地图分割配置文件(就是上面说到的XXX.gen.cfg类似的文件),该文件描述了你将怎样分割和配置它的纹理;

5.     然后,你需要添加上一步形成的配置文件的文件名到maptools.cfg内,maptools.cfg内有一个地图列表,你既可以一次只分割一幅地图,也可以批量分割多幅地图。其中defaultmap后面的地图会被首先分割,至于后面的地图会不会分割,由后面的BatchMode决定,=yes时列表中的所有地图都会被分割,而=no时只分割defaultmap后面的地图;

6.     运行地图分割工具。[译者:在此推荐Demo中赠送的那个,感觉还可以。] 注意:根据不同的配置选项,该过程可能会长一些;

7.     一旦你在硬盘上生成了分割后的地图,如果配以合适的运行时配置文件(就是上面说到的XXX.cfg类似的文件),PLSM就可以渲染你的地图了;

8.     在运行时配置文件里,你至少需要定义到哪里找地图文件、怎样加载它们、应用怎样的缺省纹理模式。其实有些选项应该和分割配置文件一致,否则运行时要出问题。

地图选择配置

    配置文件maptools.cfg和paginglandcsape2.cfg列出了可用的和缺省的地图。

    配置文件maptools.cfg被分割工具使用,而paginglandscape2.cfg文件被Demo_PagingLandScape2.exe使用。在运行你自己的应用时,你可以拷贝paginglandscape2.cfg并且重新命名(例如:PLSMTerrain.cfg),使用场景管理器的setWorldGeometry函数加载该文件。

例如: mSceneMgr->setWorldGeometry( Ogre::String("PLSMTerrain.cfg") );

maptools.cfg

·         DefaultMap: 被分割的缺省地图,该地图总是会被首先分割(如果程序没有运行时错误的话);

·         GroupName: 资源组。可以找到地图配置文件的地方;

·         <Short Map Name>=<Config File Name>: Short Map Name指定配置文件名(不要后缀);而Config File Name则指你的分割配置文件名(不要后缀)。例:hf_129_3=hf_129_3.gen。你可以列出不止一幅地图,这些地图可以一个接一个地被处理(如果batch模式开启);

·         BatchMode=yes/no 指明了你想分割所有列出的地图还是仅仅分割default map。

例如:(maptools.cfg):

   # 缺省地图, 如果BatchMode=no则只分割它

   DefaultMap=MyTerrain

   #其它地图,如果BatchMode=yes则会被分割

   puget_sound=puget_1k.gen

   grand_canyon=gcanyon_height_4k2k.gen

   MyTerrain=WorldTerrainMap.gen

   # 资源组描述,在该资源组下,所有的PLSM2资源可以被找到

   GroupName=PLSM2

   # 批量模式: yes = 分割所有列出的地图, no = 仅仅分割缺省地图

   BatchMode=no

paginglandscape2.cfg

·         DefaultMap: 应用程序在开始时加载时的第一幅地图。如果为"none"将导致PLSM2不加载任何地图(缺省值: none);

·         GroupName: 资源组描述,指明了到哪里可以找到地图配置文件;

·         <Short Map Name>=<Config File Name>: 配置的多幅地图。例:MyTerrain=WorldTerrainMap。你可以列出不止一幅地图,然后通过设置DefaultMap来选择使用谁;

·         TextureFormatDebug: 尝试强制纹理混合(缺省值: no)。

例如:(paginglandscape2.cfg):

   #缺省地图,开始加载的地图

   DefaultMap=MyTerrain

   #其它地图

   puget_sound=puget_1k

   grand_canyon=gcanyon_height_4k2k

   MyTerrain=WorldTerrainMap

   #资源组

   GroupName=PLSM2

   #不尝试强制纹理混合

   TextureFormatDebug=no

地图定义细节

    地图配置文件的名字必须和"DefaultMap"中给出的名字一致。也就是说:对于"DefaultMap=Test" ,地图的配置文件名就是"Test.cfg"。[译者:在PLSM加载你指定的地图时,这些设置可能会被用于索引数据文件。]

公共配置选项

地图定义

·         GroupName : 资源组。所有地图及地图纹理都应该包含在该资源组下(见resource.cfg)

·         LandScapeFileName : 地形文件名(不要扩展名),必须在ogre的资源路径里并且在"GroupName"指定的资源组下

·         LandScapeExtension : 地形文件的扩展名。Raw:如果是16bits raw格式,其它支持的地形文件格式是8bits, 但PNG的16bits地形文件也支持(缺省值: png)

·         LandScapeExportExtension : 地形导出后缀格式说明 (如果你想导出16bits请使用raw,或者你需要的其它格式)

·         TextureExtension : 生成的纹理扩展名, PNG可以换得最少的数据损失,DDS现在不再被支持(缺省值:png)

·         ScaleX, ScaleY, ScaleZ : 地形缩放因子,在分割设置和APP设置中可以不同,但至少应该与地形的比例协调。否则,声称纹理的splatting和法线将不再真实(缺省值: 1)

·         PageSize : 高度图分割成的页的像素尺寸,必须满足2^n + 1, 513通常是个不错的设置(缺省值: 513)

·         TileSize : 高度图的Tile的像素尺寸,必须满足2^n + 1, 65通常是个不错的设置(缺省值: 65)

地图分割专用配置

高度图定义

·         OutDirectory : 指定分割工具生成数据后将存放到什么地方(使用"LandScapeFileName"将存放到前面配置的"LandScapeFileName"配置项指定的文件加下)

·         MiniMap : 是否生成MiniMap,在鹰眼图上可能能用上 (缺省值: no)

·         Paged : 决定了是否分割地形文件和纹理文件。主要用处是便于调试(缺省值: yes)

数据源

·         Data2DFormat : 高度图的类型,可选'HeightField', 'HeightFieldRaw', 'HeightFieldN', 'HeightFieldTC', 'HeightFieldNTC','HeightFieldRawTC', 'HeightFieldRaw'.等 (缺省值: HeightField);

·         MaxValue, MinValue : 如果Data2DFormat = 'HeightFieldTC' 压缩格式,需要知道值的范围从哪里heightfield文件被压缩(缺省值 : 5000, 0)。

纹理

·         ColorMapName : 彩色纹理图的名字。你为你的整个高度图设置的彩色的纹理,分割工具可能会根据你的设置,将之分割成多个小的纹理以便PLSM2能直接使用(Textureformat=Image);

·         ColorMapSplit : 如果你希望分割彩色纹理图,设置成yes(和Textureformat=Image一起使用)。(缺省值:no);

·         ImageSplit : 二选一('yes' 或'no' ),针对于"ImagePaging"地形纹理模式。如果ColorMapSplit没有设置,该选项将被检测。该选项如设置成yes,会导致分割工具将大的图像分割成适合Page大小的小的图像;

·         LitColorMapSplit : 如果你需要照亮地形。请参见下面的照明选项(缺省值: no);

·         InfiniteMap : If you want your map to be infinitizable.(Default Value : no)

·         HeightMapBlurFactor : 高度图的模糊因子。如果你需要使高度图更加平滑(缺省值: 0.0f)

·         Equalize : Make sure heights use the whole range 0-255 or 0-65535.(Default Value : no)

·         HeightMap : 如果你想把你的高度图分割成某种相同格式的高度图(8 bits的图像或者16bits的Raw(或Png)格式,以适应data2dformat = HeightField, HeightFieldRaw, or HeightFieldTC)。(缺省值:no)

·         NormalMap : 生成法线图。RGB is xyz normal. (缺省值:no)

·         HeightNormalMap : Generates normal maps and store it as RGB as XYZ normal and Alpha as 8 bits HeightMap (usable with data2dformat = HeightFieldN, or HeightFieldNTC) cannot be combined with Raw files (it gives 8 bits instead of 16 bits.)(Default Value : no)

·         ColorMapGenerated : 生成彩色纹理图。现已废弃不用。(缺省值: no);

·         LitColorMapGenerated : 生成已经加成了光照效果的彩色纹理图,见下面的设置(缺省值: no)

·         NumMatHeightSplat : 指定高度将要被分成的段数,见下面的设置(缺省值: 0)

·         MaterialHeight1, MaterialHeight2 : 以最高地形高度的百分比形式给出的高度分段值。在MaterialHeight1 以下的使用Splat0,大于MaterialHeight1但是小于MaterialHeight2使用Splat1,大于MaterialHeight2的使用Splat3;

·         SplatFilename0, SplatFilename1, SplatFilename2, SplatFilename3, SplatFilenameX : 如果你采用了高度分段方式,这几个文件名就是你为不同高度配置的纹理的输入,但是这些纹理依然基于BaseTexture纹理层(也就是说,各层在纹理混合时都会和BaseTexture纹理层混合);

·         BaseMap : 为大比例尺设置的基本纹理,会影响较远的地形范围,但不同于BaseTexture。(缺省值:no)

·         LitBaseMap : 与上面的BaseMap类似但是加成勒光照效果。(缺省值:no)

·         CoverageMap : Coverage is RGBA, each channel has info for 1 splat (Textureformat=splatting3). (Default Value : no)

·         AlphaMaps : 为每个splatting生成Alpha图层 (Textureformat=splatting2, splatting4, splatting6, splatting7)。(缺省值:no)

·         LightMap : 生成光照图。with 8bits texture white is full light to black being full shadow(see Textureformat=splatting4). (缺省值:no)

·         ShadowMap : 用于调试,与光照图相反。(缺省值:no)

·         Sunx, Suny, Sunz : 如果计算生成光照图,这三个值以向量的方式指定了太阳光的方向。

·         Ambient, Diffuse, Blur : 生成光照图需要的参数,环境光颜色、漫反射颜色等。

·         ZHorizon : Horizon mapping with sun always on Z axis, and thus can be use in a shader to real-time shadows a terrain. (Default Value : no)

·         NumSplatMapToSplit, SplatMapName0, SplatMapName1, SplatMapName(N)' : Specifies additional map you want to split. (user provided alpha spla maps, for roads or anything)

·         AlphaSplatRGBAMaps, AlphaSplatLightMaps, RGBMaps, HorizonMap, ElevationMap, PVSMap : deprecated. (Default Value : no)

·         TextureModifiable:纹理是否应该/能够被用户改变(比如说绘制/变形)。[译者:该特性很有意思,比如说大家常常讨论的Decal,地形编辑]。

运行时配置文件

分页选项

·         Width: 世界的宽度,在X方向上,列的数目,不可缺省;如=4,表示每一行(水平方向)有4个Pages;

·         Height: 地图高度,在Z方向上,行的数目,不可缺省;如=2,表示有2行;

·         VisibleRenderables:设置了摄像机周围能看到的tiles的半径数目。

·         MaxAdjacentPages:决定了在摄像机周围将要加载的pages的半径数目(并不一定可见,取决于visible renderables.) (缺省值: 2)

·         MaxPreloadedPages:在摄像机周围需要预加载的pages的半径数目(必须比MaxAdjacentPages大)(缺省值:3)

·         MaxNumRenderable:一次可渲染可加载的最大数目;

·         MaxNumTiles:指定了一次能加载的Tiles的最大数目(也就是tiles缓冲区的大小)

数据源定义

·         Data2DFormat : 'HeightField', 'HeightFieldRaw', 'HeightFieldN', 'HeightFieldTC', 'HeightFieldNTC','HeightFieldRawTC', 'HeightFieldRaw'.指明了高度图页数据文件的格式。HeightField对应8-16bits的灰度图像文件,HeightFieldRaw 对应16bits Raw格式, HeightFieldN对应8bits灰度图像文件+和32bits的法线图文件, 格式TC对应于使用MaxValue, MinValue对高度缩放过的数据源(缺省值:HeightField);

·         MaxValue, MinValue : 如果Data2DFormat = 'HeightFieldTC',这种设置在渲染前会参照MaxValue, MinValue指定的范围对每个顶点的Y值进行缩放,该处MaxValue, MinValue高度范围。(默认值: 5000,0);

·         Deformable : 地形是否支持实时变形 (缺省值: no);

·         TextureStretchFactor : 纹理延伸因子,作用于pagesize和texturesize。例如:将一个1024的纹理铺在一个513的page上,TextureStretchFactor就应该设置成2(缺省值 : 1.0f)。

材质定义

·         TextureFormat : 定义了地形将怎样被着色。如果你想使用你自己的纹理, Image it?

    纹理模式

    纹理模式决定了你的地形的着色方式. 你可以为每个Page使用大的image(Color Texture Modes), 或者使用splatting得到好一些的近地细节,但是会消耗更多的GPU和内存资源

    PLSM2提供的纹理模式

    Color纹理模式:

    固定管线:

·         Image : 使用用户指定的Map.(例如:用terragen生成的)

·         BaseTexture : 基于高度和斜坡计算生成的ColorMap

·         BaseTexture2 : BaseTexture相似,但是采用预先生成方式

·         InstantBase : BaseTexture相似,但是采用预先生成方式,并且动态地将deformation 反映到地形。

    Shader可编程管线:

·         InstantBaseShadowed : BaseTexture相似,但是采用预先生成方式,但是根据太阳的位置动态改变阴影。

    Splatting模式:

    固定管线:

·         Splatting : 计算4 alpha(每一张图对应一个splats, 基于高度和倾斜度) => 4 通道 2 纹理单元

·         Splatting2 : "splatting" 相似(使用预先生成的4alpha) =>  4 通道 2 纹理单元

·         Splatting4 : splatting2相似,但是每个通道7个纹理单元(使用预先生成的4alpha) => 1 通道 7纹理单元

    shader 可编程管线:

·         Splatting5 : splatting4相似,但是 1通道 4 纹理单元,,使用 像素Shader (arbfp1 ps_2_0) 1 通道 4 纹理单元 实时(不使用alpha图,所以使用了更少的纹理单元)

·         SplattingShader : splatting4相似,但是1通道 4 纹理单元,使用 像素Shader (arbfp1 ps_2_0)1 通道7纹理单元(使用alpha)

      Splatting光照模式:

·         splatting3 : 1通道,3 纹理单元 + 1 光照=4(使用预先生成的3 alpha)

·         Splatting6 : splatting2相似,但是每个通道3个纹理单元,4 通道 (使用预生成的4 alpha)

·         Splatting7 : 多层纹理splatting,每1通道使用6纹理单元(使用预先生成的3 alpha)

·         NumTextureFormatSupported : 设置支持的纹理格式的数目(依赖于你在分割地图时使用的格式)[译者:在地图分割器形成的文件夹里,有对应的alpha, base, coverage 或者 light 纹理层];

·         TextureFormatSupported<n> : 列出这幅地图所支持的所有纹理格式 ;(例:TextureFormatSupported0=Base TextureFormatSupported1=InstantBase 等等);

·         MaterialHeight1, MaterialHeight2 : 以最大高度的百分比形式给出的高度分割线。在MaterialHeight1以下的部分地形Splat0, 高于MaterialHeight1但低于MaterialHeight2的地形Splat1,高于MaterialHeight1但低于MaterialHeight2的地形Splat2, 高于MaterialHeight2的地形Splat3。(在实时splatting模式下使用,或者当地形发生deformation而需要纹理更新时)

·         SplatFilename0, SplatFilename1, SplatFilename2, SplatFilename3 : map defining textures used as input for averaging colors in BaseTexture map generation.

Textureformat=splatting4)

更多配置选项

·         MaxRenderLevel :简化的LOD层次设置。必须满足2^MaxRendervel < (TileSize/2)。0 意味着不使用LODValue,100意味着使用最大的可能值。(缺省值:100);

·         MaxPixelError : The maximum error allowed when determining which LOD to use. That would determine complexity on screen. More Precise means slower. (Default Value : 8);

·         PageSize : 确定你的地形将会被GPU怎么划分批次,因为它会决定每个Page的纹理的尺寸。该值大一点较好,但是并不是所有的显卡都能支持很大的纹理。(注意:plsm2 demos 使用了257大小的小的尺寸,主要是为了测试Page管理功能), 但这可能会让你误以为PLSM2的速度比TSM还慢。在相同的pagesize和相同数目的Page的情况下,你可能会得到相同(或者更快)的结果。你可以尝试一下1025,2049(缺省值:513);

·         TileSize : 这个值比较难调整,它将会决定顶点缓冲区有多大。太大的Tilesize (> 193)会使plsm2使用32 bits的索引缓冲区(更慢或者得不到所有显卡的支持);太小的Tilesize (<65)将会使plsm2在每一帧内处理数以千计的tiles,并且会升高GPU的批次,但是可以得到更多的裁减优化(视锥裁减,水平线裁减,八叉树裁减...)。 (缺省值: 65)

·         VertexCompression : 如果你的显卡支持,请enable它 它 (如果你的显卡不支持,该设置将会被忽略)。 在GPU的因子3的前提下,它将会影响GPU内存的用法(缺省值: no);

·         VertexProgramMorph : 如果你注意到当tile改变LOD的时候的跳跃感,该参数可能会帮你减少那种感觉。但是这会带来较大的性能损失,所以在性能不太好的情况下,还不如关闭该功能。(对于ATI上用opengl时,还会牵出驱动程序的一个Bug);

·         HorizonVisibilityComputing : 水平裁减计算。如果你的地图上有高山、峭壁,请开启它,但如果仅仅是一个平面,则应该关闭它。在地形Tiles下面的所有东西 (for now just other terrain tiles, soon also any objects) 都不会送到GPU,这能大大地提高帧速,但这只是在特殊的情形下。(如果总是开启并不会太影响性能) (缺省值: no)

·         LODMorphStart: This is as a proportion of the distance between the current LODs effective range, and the effective range of the next lower LOD (Default Value : 0.2f)

·         HorizonVisibilityComputing: enable it if your map have moutains, cliff... not if it's mainly a plane. everything hidden will not be send to GPU, thus saving framerates.. (Default Value : no)

·         VertexLit: 为高度图Mesh添加发现,对于stencil additive shadows阴影模式很有用。

 

好了,plsm2的东西基本上完了,也许看了这些你还是不太明白,网上有很多的资料,你可以去看,或者去ogre的官网,有很多很好的资料.下边我就把我找的一些资料的链接贴出来:

 

Plsm2在ogre上的官方wiki:

http://www.ogre3d.org/wiki/index.php/Paging_Scene_Manager#Installation

网上一个很详细的博客

http://stdsoft.blogbus.com/logs/36067803.html

CSDN上一个对plsm2大体结构的分析

http://blog.csdn.net/MulinB/archive/2009/05/14/4183339.aspx

 

 

这些对于基本的入门已经OK了,在不行的话就Google.com 吧!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值