本系列文章由七十一霧央編寫,轉載請注明出處。
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++游戲開發》筆記十三到這里就結束了,更多精彩請關注下一篇。如果您覺得文章對您有幫助的話,請留下您的評論,點個贊,能看到你們的留言是我最高興的事情,因為這讓我知道我正在幫助曾和我一樣迷茫的少年,你們的支持就是我繼續寫下去的動力,願我們一起學習,共同努力,復興國產游戲。
對於文章的疏漏或錯誤,歡迎大家的指出。