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

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,雾所不能影响的对方,如下:


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

(至少天空曲面),解除可视角度的限制。


















©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值