您的位置:首页 > 编程语言

ogre代码学习——场景、天空面、雾化

2013-04-28 10:42 316 查看
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,雾所不能影响的对方,如下:



由于天空面只是一个平面,平视时会看到天空和背景的交界线,可以用地形去遮盖,也可以用背景色去掩饰,但是更好的是用天空盒或穹顶

(至少天空曲面),解除可视角度的限制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: