如何高效實現地圖自動拼接功能


轉自:http://www.gameres.com/491653.html

介紹

  這篇文章提供了一個諸如RPG Maker、星際爭霸關卡編輯器的自動拼接功能的算法和數據結構。當地圖編輯器提供了這個功能,能顯著加快內容創建的節奏。

  背景

  基於tile的圖像現在已經是2d游戲的標志了,因為早期的2D游戲使用有限的tile來表現一個大的2D環境。這很自然地會讓圖像塊狀並且重復。但是,高超的圖像藝術家會通過巧妙地設計來避免這些問題。
技術干貨:如何高效實現地圖自動拼接功能 ...


  一個類似的技術需要使用供過渡的tile,比如草地-水,草地-荒漠等如上圖所示的塊。但是,把這些過渡塊手工放置在合適的位置工作量非常大。一個復雜的地圖編輯器會允許用戶標記哪些塊,然后自動混合。

  自動拼接

  大部分自動拼接幾何包括14個塊,包括內部塊和外部塊(比如全部是草地和全是水的)、上、下、左、右邊界、四個外角以及四個內角。這里的算法還要兩個額外的塊一共16個。

  這個算法認為一個塊是由四象限構成的。每一個象限或者角都屬於一方(水或者草地)。所有可能的組合共有2 x 2 x 2 x 2 = 16。這16種組合可用4位的2進制數字b3 b2 b1 b0  來表示。每一位b I 對應一個角的類型。如下圖所示,分別對應左上、左下、右上和右下。
技術干貨:如何高效實現地圖自動拼接功能 ...

 

  使用4位索引,可以按如下排序:
技術干貨:如何高效實現地圖自動拼接功能 ...


  這個過程也可以反過來,用4位序列來決定角的類型。這在下一節中給出了一個算法。為簡便起見,假設地圖只有這16種情況,並可用4位序列索引。

  自動拼接算法

  1、當一個新的tile被放置到地圖中的時候,可以從它8個鄰居的情況來推斷它對應的是哪個4位索引

  2、對於4個與新tile共享一條邊的4個tile(上下左右),新的4位索引被構建,2位來自新的tile,2位來自與共享邊離得遠的tile。新的4位索引會有限的讓這tile進行過渡

  3、類似的算法也發生在剩下4個塊(左上,左下,右上,右下)。

  4、與新塊臨近的塊都已經計算了新的4位索引。
技術干貨:如何高效實現地圖自動拼接功能 ...

 

  進一步考慮

  除了上面的算法,還有以下問題需要考慮

  邊緣塊:必須小心處理邊緣或者角落的地圖,因為他們的周圍經常少於8個

  Tile組織:上面的算法假設4位索引直接對應tile索引。如果不是這樣或者索引不連續,就需要建立一個圖片和4位索引之間的雙向查找。

  變種:盡管這樣過渡比較光滑了,但是觀察者還是能看到重復的圖樣,可以把一個4位索引對應多個圖片來解決這個問題。

  實現

  這篇文章沒有理論沒有包括任何示例代碼,但是讀者可以從這個開源地圖編輯器tIDE(http://tide.codeplex.com)來研究這個自動拼接算法。
技術干貨:如何高效實現地圖自動拼接功能 ...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM