Ogre1.7的地形、天空与雾

 

地形

ogre过去在地形的支持上很少,过去只是让你导入一个高度图,然后在上面放一层基本纹理和一细节纹理,在1.7版本的Ogre后,里面单独加入了terrain的模块,在地形的支持上已经非常强大,关于新版Ogre的地形的资料少之又少,我花了好几天经过反复试验根系摸了一下,总结一下新版Ogre的地形使用

1.设置摄像机的远剪裁面为无限远

if (root->getRenderSystem()->getCapabilities()->hasCapability(Ogre::RSC_INFINITE_FAR_PLANE))
        {
            cam->setFarClipDistance(0);   // enable infinite far clip distance if we can
        }

2.设置TerrainGlobalOptions,这是一个表示地形的总体特性的类,他可以设置地形的一些特征,首先你需要new出来一个

mTerrainGlobals=new TerrainGlobalOptions();

然后设置一些必要的特征

mTerrainGlobals->setMaxPixelError(8);

这个值越小地形越精确,效率越低

在地形的渲染中。Ogre提供了一种组合贴图的渲染,就是在较远的地方使用一种贴图混合简单光影的方式来代替实际的纹理,这有很多应用:

1是这样可以再较远的地方不使用精细的纹理生成,提高效率

2是你可以使用这个特性实现游戏中照亮与黑暗的效果

下面是设置这方面的参数,首先设置在多远处开始使用组合贴图

mTerrainGlobals->setCompositeMapDistance(100);

然后设置产生组合贴图的光线方向
mTerrainGlobals->setLightMapDirection(Ogre::Vector3(0,-1,0));

设置组合贴图的光影颜色
mTerrainGlobals->setCompositeMapAmbient(smgr->getAmbientLight());
mTerrainGlobals->setCompositeMapDiffuse(ColourValue::Black);

例如上面的参数设置,就会在你的摄像机周围100范围内看到地形,而之外则是渐变到黑,这样就是游戏中只照亮你周围的效果

3.设置地形组

在Ogre中,地形是以组的形式出现的,一个地形组中有多个地形实例,一个组中的地形拥有相同的纹理,相同的高度图,并很方便在他们之间平滑连接,ogre中代表地形组的类是TerrainGroup,代表一个地形实例的类是Terrain

首先我们需要new产生一个地形组

mTerrainGroup=new TerrainGroup(场景管理器直至,地形的朝向, 地形顶点数的大小, 地形面积的大小);

Ogre手册中关于后两个参数说的很不通俗,经过试验,是这样的,第一个是顶点数目(要为2^n+1),最后一个是地形的空间尺寸(边长)

设置地形的原点位置

mTerrainGroup->setOrigin(Ogre::Vector3::ZERO);

然后设置地形的一些具体属性,通过Ogre::Terrain::ImportData& defaultimp = mTerrainGroup->getDefaultImportSettings()得到一个Terrain::ImportData类实例,然后修改它
        defaultimp.inputScale = 600;//这是对导入数据(高度图)的高度值的缩放,这个属性很重要,我们知道高度图上的高度在图像的尺度上的范围是0-1(0为全黑),所以默认下,地形的高度将在0-1范围内(这基本比平原还平原),所以要使用这个值来对原始图片上的像素值相乘,也就是这个值越大,地势越陡峭

新版orge的地形的纹理贴附是这样的,他允许地形上有几个纹理层次(数目取决与你的硬件),标记位0层,1层..n层,默认情况下你只能见到第0层,我们可以设置n+1层对之前n层纹理混合结果的混合方式,如果不混合,就只能看到0层,首先你要定义这些层的纹理是什么,纹理的大小
        defaultimp.layerList.resize(3);//设置有几层纹理

       例如设置第0层
        defaultimp.layerList[0].worldSize = 2500;//设置该层纹理的空间大小
        defaultimp.layerList[0].textureNames.push_back("2.jpg");//设置该层纹理的贴图
        defaultimp.layerList[0].textureNames.push_back("dirt_grayrocky_normalheight.dds");//设置该层纹理的法向贴图

4。定义好每层纹理后,我们要使用地形组产生地形实例

首先导入高度图

Ogre::Image img;
img.load("terrain.png", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);       

然后使用下面这个函数生个一个地形实例

mTerrainGroup->defineTerrain(x, y, &img);

地形组是指一个二维网格的地形群,上面这个函数是指在地形组这个网格的(X Y)处使用这个高度图产生一个地形实例,在ogre中每个地形实例都是方形的,所以如果你想产生矩形地形就需要产生多个地形实例,如在(0,0)和(0,1)处产生两个

5 在产生了地形实例后,我们需要对地形的纹理层进行我们想要的混合方式,这不就等于你在地形上铺东西

用地形组的迭代器访问每一个地形实例

混合的原理机制是这样的,对于每一个纹理层,都有一个保存每个像素的alpha混合值的值,可以通过Ogre::TerrainLayerBlendMap* blendMap1 = terrain->getLayerBlendMap(1)来获取第1层的这个混合数据,初始情况下都是0,也就是说默认情况下第1层对第0层的混合是0,那样你就只能看到0层,你可以通过修改这个数据来直接修改混合方式,这就像两张图像做混合,而每张混合图像代表了整个这个地形实例的表面图片,为了得到这个图像的边长,可以使用terrain->getLayerBlendMapSize(); 你还可以使用blendMap1->convertImageToTerrainSpace(x, y, &tx, &ty)来得到混合图像空间上(x,y)的那个像素对应的地形实例空间上的坐标。

最修改了混合值之后,你需要使用

blendMap1->dirty();
    blendMap1->update();

来更新

6最后我们调用mTerrainGroup->freeTemporaryResources();来做一些清理工作

当然在程序执行完毕我们需要清理掉mTerrainGroup和 mTerrainGlobals;

这就是新版Ogre的地形,虽然比之前的操作要复杂的多,我还真的琢磨了好几天,但是可以实现非常好的地形效果,而纹理层见的混合可以制造各种纹理贴附的地形效果,大家试试看

 

  1. 天空

说了地,再说天,ogre有三种表现天空的方法,skybox skydome skyplane

skybox

就是一种cube mapping

使用:

mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 5000, false);

其中参数1代表是否绘制

参数2代表这个cube mapping的材质

参数3代表天距离你多远

其中参数4代表是否先绘制天空盒,如果后绘制,他将在地形的上层

skydome

这是将一个纹理图片弯曲一下从几个方向拼成一个天,最上面中心可能会有拼痕

使用

mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8);

这里面的材质就是一张普通图片

skyplane

就简单将一张图片放在头顶代表天,适用四周有群山等遮挡看不到地平线的时候

这三种越来越简单,当然效率越来越高

ogre中雾的使用很简单,你需要在被雾影响的物体绘制前调用雾的绘制:

mSceneMgr->setFog(Ogre::FOG_EXP, fadeColour, 0.005);

这里面第一个参数是雾计算的数学模型,有线性和指数型

第二个是雾的颜色,注意你需要将视口的背景颜色也设置成此颜色

后面是一些在具体数学模型下的参数

这里面要注意,如果你需要完全看清天空,就需要将天空的距离设置的比武的最近距离要近,否则雾会遮挡天空,尽管事实是这样,而有时却并非如此。

还有雾不仅可以是雾,变一变颜色,可以变成烟、黑暗或者某种恐怖的场景~

时间: 2024-10-26 05:34:34

Ogre1.7的地形、天空与雾的相关文章

photoshop为雾霾照片去雾换天空后期教程

给各位photoshop软件的使用者们来详细的解析分享一下为雾霾照片去雾换天空的后期教程. 教程分享: 原图   最终效果   1.打开图层后先复制背景图层,CTRL+J键,然后进入滤镜ACR程序,去雾霾程序显示为0.   2.把程序向右滑动到100,这时候发现建筑非常的清晰,但天空画面出现紫红色的脏点.   3.确定后选择红色通道,用魔棒对着天空选区,半径模糊1.   4.再还原RGB三原色原图,直接删除天空,再用橡皮擦工具调整不透明度20%,流量20%对着图片底边的山脚暗部进行清清擦除,直到

[独家]大数据版穹顶之下:清华人气男模解码雾霾分布

[导读]:柴静的一部穹顶之下将对雾霾的讨论推到风口浪尖,与此同时在太平洋的另一端,一群来自中国大陆的合伙人也在针对雾霾展开一场大数据战场的较量. 怎样的"个人恩怨"引发了针对雾霾的创业?又是怎样的机缘巧合让三位创始人一拍即合?清华男模.国旗仪仗队成员.单车骑行西藏.阿拉斯加极地穿越--大数据原点栏目本期为您专访佳格霾图的情怀团队,直击他们的创业点滴,用大数据解密雾霾. 未来的"雾霾预警图" - 佳格"霾图" 佳格"霾图"是王蕴

PS7.0为风景图添加雾效果

三.起雾效果 相对雨.雪效果来说,起雾的效果要难一点,因为雾不仅在于白色的朦胧效果,而且随着不同物体距离的远近不同,清晰度也会有所不同,下面就跟着我一步一步来制作起雾的效果. 效果图如下: 1.还是打开上面两例中的那个风景素材图片,先分析图片中的物体远近不同,很明显,右边的那几个枝桠和树叶距离视觉最近,因此我们先来处理它.对这几个枝桠的选取会比较困难,先用魔术棒工具将树叶中间的蓝色天空选中,也把外面的天空选中,(选择过程中一直按着Shift不放)如图18: 图18 2.然后再选择反选,按Ctrl

WorldWind系列十三:地形数据(DEM)加载和应用(入门篇)

学习WW中DEM的加载和应用对于基于WW搞三维GIS插件开发很重要.我一直也想关注和搜集相关学习资料,之前没有开始研究它,主要是自己没能在 WW看到高程应用功能,感觉没法切入.我昨天下午和今天上午的时间就花在找研究切入点啦!实质上就是找如何在WW查看高程的功能.(现在回想一下,感觉浪费时间了,还是因为我对WW的功能没能完全知道) 我在开始学习DEM加载和应用前,我主要参看了CSDN上的博文--<庆贺,绘制出World Wind的LOD地形网格>(http://blog.csdn.net/pau

Photoshop把雾霾城市图片转为高清风景大片

  素材图片为雾霾天拍摄,画面偏灰,缺少层次感.作者修复的方法非常不错:先增加图片对比度,然后更换天空部分,再整体降噪,并加强局部明暗即可. 原图 最终效果 1.打开图层后先复制背景图层,CTRL+J键,然后进入滤镜ACR程序,去雾霾程序显示为0. 2.把程序向右滑动到100,这时候发现建筑非常的清晰,但天空画面出现紫红色的脏点. 3.确定后选择红色通道,用魔棒对着天空选区,半径模糊1. 4.再还原RGB三原色原图,直接删除天空,再用橡皮擦工具调整不透明度20%,流量20%对着图片底边的山脚暗部

PS快速制作出超级大片的天空效果图

  这篇教程是向大家介绍PS快速制作出超级大片的天空效果图方法,教程调出来的效果非常漂亮,难道也不是很难,对于喜欢摄影的朋友真的很值得学习,好了,下面我们一起来欣赏下吧! 我们看了很多摄影高手拍摄的风景照片,有一个共同点就是天空给人的感觉非常的梦幻,非常漂亮.那么对于我们普通的摄影爱好者来说,拍出这样的天空首先是时间上可遇不可求,另一个就需要我们掌握更多的还是各种复杂的摄影技术. 那么手机拍摄的天空有没有可能如此层次分明呢? 不行. 哈哈. 用手机拍风景,虽然很难表现出我们想要表达的"震撼&qu

风光片天空photoshop处理技巧示例

  蓝天白云,牧草金黄,秋高气爽.这是坝上最美的季节,是摄影者最兴奋的季节.   当时因为没有中灰渐变镜和偏振镜,为防止天空曝光过度,就按照天空测光参数进行曝光.天空虽然没有过曝,但反差不够.地面则欠曝,昏暗得厉害.整个片子欠曝了.要解决这个问题,最好将天空与地面分开来做影调调整. 第一步 用通道制作所需的选区   要将天空与地面分开进行调整,就需要创建精确的选区.根据这个图像中天空与地面影调反差明显的情况,考虑用通道制作所需的选区是比较方便的. 在通道面板中选择影调反差最明显的蓝色通道复制成蓝

《Unity 3.x游戏开发实例》一第2章 让我们从天空开始

点击Scene视图顶部中间的landscape按钮来查看该平面(见图2.1).它向各个方向无限延伸--好像在你所有的方位(你的两边.你的前面.你的后面.深入地下.直往云霄)上都是无限的.是时候制作游戏了,对吧?但是怎么开始?从哪里开始呢? 2.1 灵感 创意正是我们所需要的.每个游戏都是从创意开始的,当你拿起一本关于Unity的书,你至少会有一个游戏创意,你头脑中会突然闪过一个灵感,并让你精神为之一振.如果你和我一样,头脑中确实有10 000多个游戏创意,它们争先恐后地嚷着"制作我!制作我!&q

治雾霾,让大数据帮忙

以"两会蓝"开篇的"两会时间"里总离不开雾霾的话题,因为它实在是惹眼.刚刚履新的环保部长陈吉宁昨天下午回答记者提问时直言不讳:到了环保部每天起来第一件事情是看天.令他不安的是,当日又是个雾霾天. 3月5日,搜狗根据近期搜索数据公布了一组大数据调查,结果显示60%的人会在雾霾天里闭门不出.以2月27日的数据为基准可以看出,自2月28日起,雾霾的关注度一路持续攀高.关注度排名前10位的城市多为一.二线城市.总之,越是大城市.高密度人群,越在乎头顶上方天空的颜色,这显然与