ogre 天空与雾

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);*/
}


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页