造完了地面,接下来的任务就是搞定天空啦。
这里主要给大家介绍两种常见的构建天空的方法:
天空盒:始终围绕摄像机一定距离的包围盒
天空穹:没有底的立方体
天空面:一个天空平面
这个要比地形系统简单的多了。
一、天空盒
在OGRE中,在可以用一行代码看到天空盒的效果:
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");
这个函数一共可以传四个参数:
参数1:是否启用天空盒子
参数2:天空的材质脚本
参数3:距离摄像机的距离
参数4:是否在场景中其他元素前面渲染
//设置天空盒
//参数1:是否启用天空盒子
//参数2:天空的材质脚本
//参数3:距离摄像机的距离
//参数4:是否在场景中其他元素前面渲染
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 5000, false);
运行效果如图:
和天空盒稍有区别,注意调用函数的参数代表不同意义:
mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8);
前两个参数和天空盒子一样,
第三个参数表示天空穹的曲率,建议2~65之间,数值越低距离感越强。
第四个参数是纹理贴图的覆盖次数,
第五第六的参数和天空盒子的三四参数的意义一样。
运行效果如图:
三:天空面
其实天空面就是一个Plain,实现的代码如下:
Ogre::Plane plane;
plane.d = 1000;
plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;
mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane", 1500, 75);
第四个参数是天空面的大小,第五个是纹理贴图的重复次数。
运行效果如图:
显然这样的运行效果不是很理想,因为离地太近了,将代码作如下修改:
mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane", 1500, 50, true, 1.5f, 150, 150);
第六个参数和前面相似,是否先渲染。
第七个参数可以设置其曲率,第八第九个是xy轴的碎片数目。
再次运行,效果好了很多: