1. 场景管理器特性
void createScene(void)
{
// Set ambient light
mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
// Create a light
Light* l = mSceneMgr->createLight("MainLight");
// Accept default settings: point light, white diffuse, just set position
l->setPosition(20,80,50);
ColourValue fadeColour(0.93, 0.86, 0.76);
mSceneMgr->setFog( FOG_LINEAR, fadeColour, .001, 500, 1000);
mWindow->getViewport(0)->setBackgroundColour(fadeColour);
std::string terrain_cfg(“terrain.cfg”);
mSceneMgr -> setWorldGeometry(terrain_cfg);
// Infinite far plane?
if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_INFINITE_FAR_PLANE))
96
{
mCamera->setFarClipDistance(0);
}
// Define the required skyplane
Plane plane;
// 5000 world units from the camera
plane.d = 5000;
// Above the camera, facing down
plane.normal = -Vector3::UNIT_Y;
// Set a nice viewpoint
mCamera->setPosition(707,2500,528);
mCamera->lookAt(0, 0, 0);
}
增加了雾化效果,包括雾的颜色和方程参数,视口的背景色与雾颜色相同,避免背景与场景的反差
Plane为天空平面,高度5000,只建立没设置天空面。
如果把视口背景色设置为黑色,是如下效果,雾仍然有影响
加入天空面
mSceneMgr->setSkyPlane(true, plane, ”Examples/CloudySky”);
天空距离5000,被雾笼罩,辨认不出纹理
图形硬件对雾的处理是整个场景被渲染完成后才进行,因此GPU无法挑拣出天空面,导致天空面被雾化影像
效果如下:
解决此问题,把天空距离拉近到500,雾所不能影响的对方,如下:
由于天空面只是一个平面,平视时会看到天空和背景的交界线,可以用地形去遮盖,也可以用背景色去掩饰,但是更好的是用天空盒或穹顶
(至少天空曲面),解除可视角度的限制。