您的位置:首页 > 其它

ogre 天空与雾

2015-07-23 14:30 232 查看
ogre天空与雾
接上章,我们来添加天空与雾。
void TutorialApplication::createScene(void)
{
// Create your scene here :)
// 	设置相机的位置,因为地形一般都比较大,所以设置得远一点
mCamera->setPosition(Ogre::Vector3(1683,50,2116));
mCamera->lookAt(Ogre::Vector3(1963,50,1660));
mCamera->setNearClipDistance(0.1);

bool infiniteClip = mRoot->getRenderSystem()->getCapabilities()->hasCapability(Ogre::RSC_INFINITE_FAR_PLANE);

if (infiniteClip)
{
// 如果显卡系统(即渲染系统)支持无穷远的剪切,那么设置可以看到无穷远的地方
mCamera->setFarClipDistance(0);
}
else
{
mCamera->setFarClipDistance(50000);
}

// 设置环境光
mSceneMgr->setAmbientLight(Ogre::ColourValue(0.2,0.2,0.2));
Ogre::Vector3 lightdir(0.55,-0.3,0.75);
lightdir.normalise();

// 创建一个有向光
Ogre::Light* light = mSceneMgr->createLight("TestLight");
light->setType(Ogre::Light::LT_DIRECTIONAL);
light->setDirection(lightdir);
light->setDiffuseColour(Ogre::ColourValue::White);
light->setSpecularColour(Ogre::ColourValue(0.4,0.4,0.4));

// Fog
Ogre::ColourValue fadeColour(.9, .9, .9);
mWindow->getViewport(0)->setBackgroundColour(fadeColour);

//mSceneMgr->setFog(Ogre::FOG_LINEAR, fadeColour, 0, 600, 900);
//mSceneMgr->setFog(Ogre::FOG_EXP, fadeColour, 0.002);
mSceneMgr->setFog(Ogre::FOG_EXP2, fadeColour, 0.002);

// 创建全局的地形配置信息
mTerrainGlobals = OGRE_NEW Ogre::TerrainGlobalOptions();

// 创建TerrainGroup对象,以管理地形
// 第一参数为场景管理器,第二个参数为地形的的排布,第三个参数为地形的大小,第四个参数为整个地块的大小
mTerrainGroup = OGRE_NEW Ogre::TerrainGroup(
mSceneMgr,
Ogre::Terrain::ALIGN_X_Z,
513,
12000.0);
mTerrainGroup->setFilenameConvention(Ogre::String("terrain"),Ogre::String("dat"));
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();

// Sky Techniques
/*mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");*/
/*mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 300);*/
/*mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 300, false);*/

mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8);

/*Ogre::Plane plane;
plane.d = 1000;
plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;
mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane", 1500, 75);
mSceneMgr->setSkyPlane(
true, plane, "Examples/SpaceSkyPlane", 1500, 50, true, 1.5, 150, 150);*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: