Ogre中级教程7翻译版(6)

2020-04-21 02:15

// 设置环境光

mSceneMgr->setAmbientLight(Ogre::ColourValue(0.2, 0.2, 0.2));

// 创建全局的地形配置信息

mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions();

// 创建TerrainGroup对象,以管理地形

// 第一参数为场景管理器,第二个参数为地形的的排布,第三个参数为地形的大小,第四个参数为整个地块的大小

mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(mSceneMgr, Ogre::Terrain::ALIGN_X_Z, 513, 12000.0f);

// 如果要保存改地形(序列化),那么使用BasicTutorial3Terrain文件名来保存,后缀为dat

mTerrainGroup->setFilenameConvention(Ogre::String(\Ogre::String(\

// 设置其位置

mTerrainGroup->setOrigin(Ogre::Vector3::ZERO);

// 配置地形

configureTerrainDefaults(light);

// 定义地形

for (long x = 0; x <= 0; ++x) for (long y = 0; y <= 0; ++y) defineTerrain(x, y);

// 同步载入所有的地形,这样我们一启动就可以得到所有的一切了 mTerrainGroup->loadAllTerrains(true);

// 如果只是单纯的载入地形,将所有已存在的地形调用initBlendMaps if (mTerrainsImported) {

Ogre::TerrainGroup::TerrainIterator ti = mTerrainGroup->getTerrainIterator();

while(ti.hasMoreElements()) {

Ogre::Terrain* t = ti.getNext()->instance; initBlendMaps(t); } }

// 清理临时资源

mTerrainGroup->freeTemporaryResources(); }

默认地形配置

Terrain组件是非常灵活很容易配置的。mTerrainGlobals变量存储了全局的地形配置信息。

在configureTerrainDefaults函数中添加如下代码:

[cpp] view plaincopy // 配置MaxPixelError为8

// 本配置决定了地形的精度,这个值越小则地形越精细,但需要更大的开销 mTerrainGlobals->setMaxPixelError(8);

// 配置CompositeMapDistance为3000

// 本配置决定了多远的距离内,地形才会被渲染出来 mTerrainGlobals->setCompositeMapDistance(3000);

做了2个配置,具体见代码注释说明。然后我们需要使用有向光,处理地形的光照贴图:

[cpp] view plaincopy

// 设置其环境光和漫反射光,这样在光照下才能够反衬出自身的纹理 mTerrainGlobals->setLightMapDirection(light->getDerivedDirection()); mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight()); mTerrainGlobals->setCompositeMapDiffuse(light->getDiffuseColour());

然后我们再设置“载入配置”的信息:

[c-sharp] view plaincopy

// 当我们载入地形时,其默认的配置如下:

Ogre::Terrain::ImportData& defaultimp = mTerrainGroup->getDefaultImportSettings(); defaultimp.terrainSize = 513;

defaultimp.worldSize = 12000.0f; defaultimp.inputScale = 600; defaultimp.minBatchSize = 33; defaultimp.maxBatchSize = 65;

这些值的意义暂时不讲,后续中我们再来详细解释。最后一件事情是设置纹理贴图:

[cpp] view plaincopy // 纹理信息

defaultimp.layerList.resize(3);

defaultimp.layerList[0].worldSize = 100;

defaultimp.layerList[0].textureNames.push_back(\lar.dds\

defaultimp.layerList[0].textureNames.push_back(\.dds\

defaultimp.layerList[1].worldSize = 30;

defaultimp.layerList[1].textureNames.push_back(\01_diffusespecular.dds\

defaultimp.layerList[1].textureNames.push_back(\01_normalheight.dds\

defaultimp.layerList[2].worldSize = 200;

defaultimp.layerList[2].textureNames.push_back(\03_diffusespecular.dds\

defaultimp.layerList[2].textureNames.push_back(\03_normalheight.dds\

我们设置了地形有3层,每一层我们初始化了其大小、材质。默认情况下,材质生成器为每层提供了2个纹理贴图:

1、diffuse_specular

2、normal_height

这里先不展开讨论,知道有这么回事就行。至此,我们的代码如下:

[cpp] view plaincopy // 默认的地形配置信息

void BasicTutorial4::configureTerrainDefaults(Ogre::Light* light) {

// 配置MaxPixelError为8

// 本配置决定了地形的精度,这个值越小则地形越精细,但需要更大的开销 mTerrainGlobals->setMaxPixelError(8);

// 配置CompositeMapDistance为3000

// 本配置决定了多远的距离内,地形才会被渲染出来 mTerrainGlobals->setCompositeMapDistance(3000);

// 设置其环境光和漫反射光,这样在光照下才能够反衬出自身的纹理 mTerrainGlobals->setLightMapDirection(light->getDerivedDirection()); mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight()); mTerrainGlobals->setCompositeMapDiffuse(light->getDiffuseColour());

// 当我们载入地形时,其默认的配置如下:

Ogre::Terrain::ImportData& defaultimp = mTerrainGroup->getDefaultImportSettings(); defaultimp.terrainSize = 513;


Ogre中级教程7翻译版(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:溶剂罐区作业指导书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: