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)); //聚光灯光束有宽度,包括两个部分,核心光束和周边光束。