OGRE地形

本文介绍了Ogre中地形配置文件的参数含义及其作用,并展示了如何通过程序方式加载地形。

Ogre中的地形

使用terrain.cfg 
WorldTexture=terrain_texture.jpg  //地形纹理
DetailTexture=terrain_detail.jpg  //细节纹理
DetailTile=3                      //细节纹理在一个地形小块中的平铺数
PageSource=Heightmap              //高度图数据源
Heightmap.image=terrain.png       //高度图名称,符合2^n+1
PageSize=513                      //高度图大小
TileSize=65                       //地形小块大小
MaxPixelError=3                   //决定使用层次细节时充许误差
PageWorldX=1500                   //地形在世界中的范围x方向
PageWorldZ=1500                   //z方向
MaxHeight=100                     //世界中地形最大映射高度
MaxMipMapLevel=5                  //层次细节上限
#VertexNormals=yes                //在缓冲中计算顶点法线,计算机光照或GPU程序用到时打开
#VertexColors=yes         //在缓冲中设置顶点颜色,假如有GPU程序需要时打开
#UseTriStrips=yes                 //对于现在的硬件,建议关掉
VertexProgramMorph=yes         //使用顶点程序进行LOD融合处理
LODMorphStart=0.2                 //LOD融合开始点:高,低LOD之间距离之比

下列参数用于提供自己的着色程序时使用,这会提供自己定义的material,那么先前定义的
WorldTexture 与 DetailTexture的设置不再用到,多余的了。

MorphLODFactorParamName=morphFactor 
//假设VertexProgramMorph被设为yes,定制的material中包括一个高级顶点程序。它指定了一个顶点
//程序的参数名,这个参数用于融合LOD,参数值从0-1,0表示不调整,1表示完全调整到下一级LOD

MorphLODFactorParamIndex         //用于materail中包含低级顶点程序的情况,意义同上
CustomMaterialName               //指定的materail名字

上述配置文件定义了基于高度图的地形。这些参数定义可概括为两类:Ogre使用第一类从高度图产生地形
mesh与材质。第二类是定制材质与GPU顶点程序,这可以代替ogre自动产生的着色程序。
另外的说明:
TerrainScenceManager会把高度图分为向个pages,每个page由几个tiles组成.而它们也不过是个方便的名字,
它们都定义了在产生的mesh中一组构成正方形的顶点集。
WorldTexture定义的纹理不必与目标地形一样大。
PageWorldX,PageWorldZ可以缩放世界中的地形。
MaxHeight 在Y方向缩放地形。
DetailTexture 只使用一个纹理,如使用多层纹理,应该使用自定义materail。

从程序加载地形
setWorldGeometry()有重载形式,一种用于加载配置文件,另一种我们可在程序中使用,以
达到手工加载的功能。这里,SceneData被 typedef 为std:map,它存储了如我们在terrain.cfg
中看到那些值对。假设我们已经从某个二进制文件读入我们想要的内容到SceneData中。我们要做
的就是把读入的内容转换成setWorldGeometry()需要的类型。先看一下函数原型:
Ogre::SceneManager::setWorldGeometry (  DataStreamPtr &  stream,  
  const String &  typeName = StringUtil::BLANK 
 )  
DataStreamPtr是一个智能指针,因此从局部变量中返回是安全的,程序相当直观,不再多说了。

Ogre::DataStreamPtr Process_Loader::getSceneDataStream(SceneData &data) {
// create what looks like a config file for the edification of Ogre
std::string mem;
SceneData::iterator it;
for (it=data.begin(); 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);
// stuff this into a MemoryDataStream
Ogre::DataStreamPtr pStr(new Ogre::MemoryDataStream(pMem, mem.length() + 1));
return pStr;
}
// and then elsewhere in the world loader:
Ogre::DataStreamPtr pStr = getSceneDataStream(terrainDef);
m_sceneMgr->setWorldGeometry(pStr);

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值