[OGRE]基础教程来五发:来谈一谈蓝天白云

来源:互联网 发布:淘宝站外活动报名 编辑:程序博客网 时间:2024/04/28 23:17

造完了地面,接下来的任务就是搞定天空啦。

这里主要给大家介绍两种常见的构建天空的方法:

天空盒:始终围绕摄像机一定距离的包围盒

天空穹:没有底的立方体

天空面:一个天空平面

这个要比地形系统简单的多了。


一、天空盒

在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轴的碎片数目。

再次运行,效果好了很多:




原创粉丝点击