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

2020-04-21 02:15

BasicTutorial4::createScene函数中:

[cpp] view plaincopy // 创建场景

void BasicTutorial4::createScene(void) {

// 设置相机的位置,因为地形一般都比较大,所以设置得远一点 mCamera->setPosition(Ogre::Vector3(1683, 50, 2116)); mCamera->lookAt(Ogre::Vector3(1963, 50, 1660)); mCamera->setNearClipDistance(0.1); mCamera->setFarClipDistance(50000);

if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(Ogre::RSC_INFINITE_FAR_PLANE)) {

// 如果显卡系统(即渲染系统)支持无穷远的剪切,那么设置可以看到无穷远的地方

mCamera->setFarClipDistance(0); } }

至于他干了些啥,请参看注释 设置光线

地形组件使用有向光来反衬其纹理,首先往场景中放入一个有向光BasicTutorial4::createScene:

[cpp] view plaincopy // 创建一个有向光

Ogre::Vector3 lightdir(0.55, -0.3, 0.75); lightdir.normalise();

Ogre::Light* light = mSceneMgr->createLight(\light->setType(Ogre::Light::LT_DIRECTIONAL); light->setDirection(lightdir);

light->setDiffuseColour(Ogre::ColourValue::White);

light->setSpecularColour(Ogre::ColourValue(0.4, 0.4, 0.4));

// 设置环境光

mSceneMgr->setAmbientLight(Ogre::ColourValue(0.2, 0.2, 0.2)); 配置地形

首先,创建一组全局的地形配置信息:

[cpp] view plaincopy

mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions();

然后,创建一个TerrainGroup对象,使用该对象我们可以管理后续创建出来的地形:

[cpp] view plaincopy

// 创建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); 到了配置地形的时候了:

[cpp] view plaincopy // 配置地形

configureTerrainDefaults(light);

此函数后续再讲解,注意下我们将有向光的对象作为其参数了。然后我们定义我们的地形并加入到TerrainGroup中去:

[cpp] view plaincopy // 定义地形

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

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

这样我们得到一个地形(因为只循环了一次),后续我们再来讲解defineTerrain函数。

使用下面的代码处理只载入已存在地形的信息:

[cpp] view plaincopy

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

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

while(ti.hasMoreElements()) {

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

上面代码使用迭代器遍历了TerrainGroup的所有已存在的地形,并使用函数initBlendMaps作用之,至于本函数的用法后续说明。

最后一件事情:清除初始化地形中的临时资源:

[cpp] view plaincopy // 清理临时资源

mTerrainGroup->freeTemporaryResources();

以下列出到目前为止的代码清单,先别忙着编译执行哦:

[cpp] view plaincopy // 创建场景

void BasicTutorial4::createScene(void) {

// 设置相机的位置,因为地形一般都比较大,所以设置得远一点 mCamera->setPosition(Ogre::Vector3(1683, 50, 2116)); mCamera->lookAt(Ogre::Vector3(1963, 50, 1660)); mCamera->setNearClipDistance(0.1); mCamera->setFarClipDistance(50000);

if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(Ogre::RSC_INFINITE_FAR_PLANE)) {

// 如果显卡系统(即渲染系统)支持无穷远的剪切,那么设置可以看到无穷远的地方

mCamera->setFarClipDistance(0); }

// 创建一个有向光

Ogre::Vector3 lightdir(0.55, -0.3, 0.75); lightdir.normalise();

Ogre::Light* light = mSceneMgr->createLight(\ light->setType(Ogre::Light::LT_DIRECTIONAL); light->setDirection(lightdir);

light->setDiffuseColour(Ogre::ColourValue::White);

light->setSpecularColour(Ogre::ColourValue(0.4, 0.4, 0.4));


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

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

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

马上注册会员

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