Ogre 学习笔记 (二) 环境:阴影 、雾效、灯光

1. 雾效

雾的类型:线性和指数,线性雾呈线性增长厚度,指数雾呈指数增长厚度。每个单位距离的雾,后者增长的快。

ColourValue fadeColour(0.9,0.9,0.9);

mWindow->getViewport(0)->setBackgroundColour(fadeColour); //如果有多个视口,用getNumViewports来获取视口数

mSceneMgr->setFog(FOG_LINEAR,fadeColour,0.0,50,500); //第一个参数是雾的类型,第二个参数是雾的颜色,第三个参数对于线性雾是没用的,第四个参数和第五个参数表示雾的厚度范围。

mSceneMgr->setFog(FOG_EXP,fadeColour,0.005); //指数雾不需要指定起始和结束,而需要指定密度

雾是曲化的形式存在,因此在和其他平面相交的地方会出问题,解决方案是用曲面和它接触。

2.阴影

全面支持多种阴影技术,包括模版阴影(stencil),纹理阴影(texture),叠加阴影(additive),调制阴影(modulative)。

先创建环境光,再设定shadow的类型。

mSceneMgr->setAmbientLight(ColourValue(0,0,0));

mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); //阴影类型为叠加阴影

ent=mSceneMgr->createEntity("Robot","robot.mesh");

ent->setCastShadows(true);

3.灯光

光类型:点光源,聚光灯,方向光

光特征:漫反射,镜面反射

light=mSceneMgr->createLight("light1");

light->setType(Light::LT_POINT);   //光类型为点光源

light->setPosition(Vector3(0,150,250)); //灯光本身只有2个函数setPosition和setDirection

light->setDiffuseColour(1.0,0.0,0.0);   //漫反射

light->setSpecularColour(1.0,0.0,0.0);   //镜面反射

light=mSceneMgr->CreateLight("light2");   //加一个黄色的方向光照到Robot的前面

light->setType(Light::LT_DIRECTIONAL);

light->setDiffuseColour(ColourValue(.25,.25,0));

light->setSpecularColour(ColourValue(.25,.25,0));

light->setDirection(Vector3(0,-1,1)); //方向光是从无限远的发出的点光源,所以是平行光,不需要指定位置,仅仅需要用向量来表示它的方向

light=mSceneMgr->createLight("light3"); //加一个蓝色的聚光灯

light->setType(Light::LT_SPOTLIGHT);

light->setDiffuseColour(0,0,1.0);

light->setSpecularColour(0,0,1.0);

light->setDirection(-1,-1,0);

light->setPosition(Vector3(300,300,0)); //设定聚光灯的位置和方向

light->setSpotlightRange(Degree(35),Degree(50)); //聚光灯光束有宽度,包括两个部分,核心光束和周边光束。

原文地址:https://www.cnblogs.com/easyfrog/p/2849775.html