ogre代码学习——地形 手工和cfg创建

1. 配置文件创建地形 Terrain.cfg

# The main world texture (if you wish the terrain manager to create a material for you) 
WorldTexture=terrain_texture.jpg 
# The detail texture (if you wish the terrain manager to create a material for you) 
DetailTexture=terrain_detail.jpg 
#number of times the detail texture will tile in a terrain tile 
DetailTile=3 
# Heightmap source 
PageSource=Heightmap 
# Heightmap-source specific settings 
Heightmap.image=terrain.png 
# If you use RAW, fill in the below too 
# RAW-specific setting - size (horizontal/vertical) 
#Heightmap.raw.size=513 
# RAW-specific setting - bytes per pixel (1 = 8bit, 2=16bit) 
#Heightmap.raw.bpp=2 
# How large is a page of tiles (in vertices)? Must be (2^n)+1 
PageSize=513 
# How large is each tile? Must be (2^n)+1 and be smaller than PageSize 
TileSize=65 
# The maximum error allowed when determining which LOD to use 
MaxPixelError=3 
# The size of a terrain page, in world units 
PageWorldX=1500 
PageWorldZ=1500 
# Maximum height of the terrain 
MaxHeight=100 
# Upper LOD limit 
MaxMipMapLevel=5 
#VertexNormals=yes 
100
#VertexColors=yes 
#UseTriStrips=yes 
# Use vertex program to morph LODs, if available 
VertexProgramMorph=yes 
# The proportional distance range at which the LOD morph starts to take effect 
# This is as a proportion of the distance between the current LODs effective range, 
# and the effective range of the next lower LOD 
LODMorphStart=0.2 
# This following section is for if you want to provide your own terrain shading routine 
# Note that since you define your textures within the material this makes the 
# WorldTexture and DetailTexture settings redundant 
# The name of the vertex program parameter you wish to bind the morph LOD factor to 
# this is 0 when there is no adjustment (highest) to 1 when the morph takes it completely 
# to the same position as the next lower LOD 
# USE THIS IF YOU USE HIGH-LEVEL VERTEX PROGRAMS WITH LOD MORPHING 
#MorphLODFactorParamName=morphFactor 
# The index of the vertex program parameter you wish to bind the morph LOD factor to 
# this is 0 when there is no adjustment (highest) to 1 when the morph takes it completely 
# to the same position as the next lower LOD 
# USE THIS IF YOU USE ASSEMBLER VERTEX PROGRAMS WITH LOD MORPHING 
#MorphLODFactorParamIndex=4 
# The name of the material you will define to shade the terrain 
#CustomMaterialName=TestTerrainMaterial

键值对的配置文件,用来帮助Ogre生成高度场地形

作用1:根据高度场图片和参数,生成地形的网络模型

作用2:根据自定义材质和GPU程序,生成相应的地形材质纹理

Ogre的TerrainSceneManager 会把高度长地图 “切割” 成多个区域,每个区域成为 Page(页),通过 Tile 瓦片的数量决定页的大小,Tile代表正方形顶点组

Heightmap(高度场图)和WorldTextur(整个场景的纹理),不需要大小一样,可以通过PageWorldX 和 PageWorldZ来重新设置大小

MaxHeight 设置高度场图的高度元素与世界坐标的对应

DetailTexTure 制定一层纹理循环附着在地面上,如草地或沙场,如果需要层叠纹理半透明效果需要自定义材质


2. 不通过配置文件直接创建地形(没懂)

Ogre::DataStreamPtr Process_Loader::getSceneDataStream(SceneData& data){ 
//  为Ogre创建类似一个配置文件格式的数据
Std::string mem; 
SceneData::iterator it; 
for (it=data.bengin(); it!=data.end(); it++){ 
mem += it->first; 
mem += “=”; 
mem += it->second; 
mem+= “\n”; 

void *pMem = (void *)new unsigned char[mem.length()+1]; 
memset(pMem, 0, mem.length()+1); 
memcpy(pMem,mem.c_str(),mem.length()+1); 
//  把这些放入一个新创建的MemoryDataStream 
Ogre::DataStreamPtr pStr(new Ogre::MemoryDataStream(pMem, mem.length()+1)); 
return pStr; 

//  在创建世界时载入
Ogre::DataStreamPtr pStr = getSceneDataStream(terrainDef); 
m_sceneMgr->setWorldGeometry(pStr); 




















你可能感兴趣的:(ogre代码学习——地形 手工和cfg创建)