`
aspnetwinform
  • 浏览: 89843 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法

 
阅读更多

本系列文章由七十一雾央编写,转载请注明出处。

http://blog.csdn.net/u011371356/article/details/9611887

作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5&mod=personinfo





在上一节中,雾央讲解了一种战争迷雾的实现方法,思想很简单,实现出来的效果里锯齿感也很强,当然如果网格能比较小,看起来也还算凑合,不过用在游戏中就显得不是很合适了。今天雾央将讲解一种新的算法,可以用来实现平滑过渡的战争迷雾,由于内容比较多,所以雾央会分几节笔记来讲解,今天先讲解原理。

相信大家都是玩过魔兽争霸的,虽然它最火的年代已经过去了,不过基于魔兽的地图Dota如今也还算是风头正劲,雾央也是一名忠实的Dota爱好者,不过水平比较菜,哈哈,大家对游戏开发比较感兴趣,肯定不会错过这款经典的游戏吧。

事实上,魔兽不仅是一个游戏,它也提供了一个地图编辑器,供玩家自己编辑地图,创造属于自己的乐趣,Dota地图正是由此而来,网上很多的RPG地图也都是网友们的杰作。PS:这种玩家借助原作创造的游戏甚至可能会超过原作,比如Dota,还有一种行为叫MOD,即玩家修改游戏,一个很有名的例子就是CS和《半条命》,这也算是开发游戏的方式,呵呵。

扯远了,回到今天的话题,魔兽这款游戏很经典,我们除了可以获得游戏的乐趣以外,还可以从它学到很多游戏开发的知识,比如它的地形拼接算法。

首先我们看一下它的地形拼接算法实现的效果吧。

大家如果现在电脑里有魔兽争霸就最好了,可以打开魔兽安装目录,那里有一个名为World Editor.exe的程序,即地图编辑器。

双击打开它,看到下面的窗口

大家选择左下角的“地形”,再选择“纹理”,然后选中“草地”,如下图所示

现在大家就可以创造地形啦,比如在屏幕中间位置单击一下鼠标左键,就放置了一块草地

在右边再放置一块草地

神奇的事情出现了,两块草地之间自动连接起来了,过渡的天衣无缝!!!

这是怎么做到的呢?下面雾央就来讲解一下它实现的原理,最后大家还可以动手实现类似的效果哦


其实秘密都归结在魔兽的地图素材上(PS:素材来源于9ria,算法也学自于此,上节笔记中雾央有说明)。

这张素材就是一块块草地贴图的拼接体,我们把它分割开


看起来似乎是随意排列的,但其实它排列的很巧妙,不得不惊叹于暴雪软件工程师的聪明才智啊。

大家注意看一下1,2,4,8号图元,它们分别是左上、右上、左下、右下这四个角落有草地的图片,也就是最基本的图元,利用这四个就可以拼接出任何形状的草地。那么为什么我们还需要后面那么多的图元呢?答案是为了平滑过渡。

这种拼接是把地图作为了TileMap进行的,举个例子,某个Tile中开始贴的是1号图元,

然后这个Tile中又贴了8号图元

两者合起来就应该是从右上到左下连起来的一片草地,但是直接两个合并起来显然过渡的不好,大家看一下素材中的9号图元:

是不是正好是从右上到左下连起来的很自然的草地?那么我们用9号图元替代刚才的1号+8号不就得到了过渡自然的草地吗?大家已经发现,9=1+8,总结下来就是,使用1,2,4,8号图元去贴图,同一Tile内的贴图数值相加,然后用新的编号的贴图替换即可。

是不是感觉很神奇?事实上还有一点需要注意,当和超过15的时候就不需要再加了,因为15已经是Tile内铺满草坪的情况了,在魔兽中,如果Tile内铺满草坪,会随机使用一种铺满的图样,以使得地形更加丰富多彩。

如下面的贴图,从0,15~31中选择出一种替换。

知道了基本原理后,那么实现的思路是什么呢?

大家再看魔兽的地图编辑器,它是以顶点贴图的,而不是以Tile进行。


鼠标所在的位置会出现一块浅色前景阴影,它选中的是四个Tile,因为每次贴草地都是会贴图一块完整的图案,即1+2+4+8,每一块出现在一个Tile的角落中,且四块相邻。它背后进行的工作就是左上Tile贴4号图,右上Tile贴8号图,左下Tile贴1号图,右下Tile贴2号图,当在相邻的Tile内贴图时,同样按照这样的过程进行,最后将同一Tile的图号进行累加,然后用新的图案代替即可。

当然有一点需要注意的是,在同一位置点击两次应该不再累加了,否则显然就不对了。

另外大家可能会产生疑惑,这个东西可以用在地图编辑器或者游戏中地形生成算法,但是和我们的战争迷雾有什么关系呢?事实上战争迷雾和地形本质上没什么区别,只不过一个可以认为是前景,一个是背景,呵呵,大家看下面这张图:

如果我们用这张图作为素材,覆盖在最上面,白色的地方作透明处理,不就可以实现平滑过渡的战争迷雾了吗?

在下一节笔记里,雾央将一步一步实现平滑过渡的战争迷雾,欢迎保持关注。



《C++游戏开发》笔记十三到这里就结束了,更多精彩请关注下一篇。如果您觉得文章对您有帮助的话,请留下您的评论,点个赞,能看到你们的留言是我最高兴的事情,因为这让我知道我正在帮助曾和我一样迷茫的少年,你们的支持就是我继续写下去的动力,愿我们一起学习,共同努力,复兴国产游戏。

对于文章的疏漏或错误,欢迎大家的指出。



分享到:
评论

相关推荐

    [源码]魔兽争霸3简易2D地形编辑器

    一个简易的2D地形自动拼接程序......... SDK: Microsoft DirectX SDK (March 2009) IDE: Visual Studio 2008 Language: C++

    Warcraft3.Viewer.v2.2源代码(C++)

    《Warcraft3.Viewer.v2.2源代码分析——深入理解C++编程实践》 Warcraft 3 Viewer v2.2 是一个专为魔兽争霸3游戏设计的查看器,其源代码采用C++语言编写,提供了对游戏状态的实时监控和分析功能。这个项目的源代码...

    yxdown.com_Warcraft3FrozenThrone1.26_chs(3).rar

    《Warcraft III: The Frozen Throne》是暴雪娱乐公司开发的一款即时战略游戏,它是《魔兽争霸III:混乱之治》的扩展包。标题中的"yxdown.com_Warcraft3FrozenThrone1.26_chs(3).rar"表明这是一个在yxdown.com网站上...

    Unity 逼真地形效果 编辑器地形扩展插件Relief Terrain Pack v3.zip

    Unity 逼真地形效果是游戏开发中的一个重要环节,特别是在3D游戏中,真实感的地形能够极大地提升玩家的沉浸感。Relief Terrain Pack v3是一款专为Unity 3D设计的编辑器地形扩展插件,旨在帮助开发者快速创建、编辑和...

    war3-C++游戏设计案例教程中的例子

    在本教程中,我们将深入探讨"war3-C++游戏设计案例教程",这是一个基于C++编程语言的游戏开发实例。教程作者沈大林以其丰富的经验和深入的理论知识,为我们揭示了如何利用C++来构建游戏,特别是针对《魔兽争霸3》...

    java小游戏 Warcraft_Remake(源码)

    java小游戏 Warcraft_Remake(源码)java小游戏 Warcraft_Remake(源码)java小游戏 Warcraft_Remake(源码)java小游戏 Warcraft_Remake(源码)java小游戏 Warcraft_Remake(源码)java小游戏 Warcraft_Remake(源码)java小...

    Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具).zip

    Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具).zip Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》游戏录像工具).zip Java Warcraft Ⅲ Replay Parser(Java解析《魔兽争霸3》...

    MdxLib.zip_Warcraft 3_class A_csharp vector3 _warcraft

    在电子游戏开发领域,Warcraft 3(魔兽争霸3)是一款备受赞誉的经典游戏,其丰富的模型资源为玩家提供了无限的创意空间。对于开发者来说,能够理解和操作这些模型是至关重要的。MdxLib是一个专门针对.NET 3.5框架...

    魔兽3地图文件及MPQ文件的查看和解压(c++源码)

    魔兽争霸3作为一款经典的即时战略游戏,其地图文件和MPQ文件是游戏的核心组成部分。MPQ,全称“Microsoft Packing Queue”,是由Blizzard Entertainment设计的一种文件打包格式,用于存储游戏资源,如图像、音频和...

    warcraft1_程设魔兽一答案_

    这个压缩包包含了实现“魔兽一”任务的源代码文件`warcraft1.cpp`,这通常是一个C++程序,用于模拟或分析与魔兽争霸游戏相关的算法或策略。 在程序设计领域,尤其是游戏开发,了解和掌握基本的数据结构和算法至关...

    Beginning Lua with World of Warcraft Addons

    对于想要进入游戏开发领域,特别是对魔兽世界插件开发感兴趣的读者而言,《Beginning Lua with World of Warcraft Addons》无疑是一本宝贵的资源。它不仅能够带领读者从零开始掌握Lua语言的基础知识,还能通过实战...

    Java小游戏之Warcraft-Remake

    《Java小游戏之Warcraft-Remake》是一款基于Java编程语言开发的小型游戏,它尝试复刻经典的魔兽争霸(Warcraft)游戏体验。在这款游戏中,玩家可以体验到类似魔兽争霸的策略对战,通过控制单位、采集资源、建造建筑...

    连连看 C++,魔兽图像音乐

    《连连看游戏开发详解——基于C++与魔兽图像音乐》 在编程领域,游戏开发是一项既有趣又富有挑战性的任务,尤其是经典的休闲游戏——连连看。本篇文章将深入探讨如何利用C++编程语言,结合魔兽游戏的图像和音乐资源...

    World of Warcraft Programming 2nd Edition pdf

    《World of Warcraft编程:创建WoW插件指南与参考》(第二版)是一本专门针对World of Warcraft(以下简称WoW)游戏开发者的书籍。本书由James Whitehead II和Rick Roe共同编写,并由Wiley Publishing, Inc.出版发行...

    PooGonzalez_NPCA_worldofwarcraft_C++_

    在游戏开发领域,尤其是大型多人在线角色扮演游戏(MMORPG)中,《World of Warcraft》(魔兽世界,简称WoW)无疑是一款标志性作品。该项目名为"PooGonzalez_NPCA_worldofwarcraft_C++_",显然与WoW游戏中的拉丁美洲...

    w3l最新源码

    【w3l最新源码】是一个与《魔兽争霸III》(Warcraft III)相关的项目,其标签"war3"明确指出了它与这款经典游戏的紧密联系。在描述中提到,该源码支持1.29版本,这表明它是为适应游戏的某个特定更新而设计的,可能是...

    Warp修改工具,war3修改器,C++

    《Warp修改工具与War3地图编辑:C++编程在魔力宝贝自定义地图中的应用》 在电子游戏领域,尤其是魔兽争霸3(Warcraft III)的玩家社区中,自定义地图一直是玩家创新和娱乐的重要组成部分。其中,“魔力宝贝”作为一...

Global site tag (gtag.js) - Google Analytics