XNA - Basic HeightMap (高度映射)

現在要跟大家介紹甚麼是HeightMap,為什麼會想要介紹這個呢?

最近在Trace XNA Creator Club的專案,剛好看到這個專案檔案...


範例

剛開始不知道這個是甚麼的人,可能會覺得很奇怪,不知道專案幹嘛取成這樣的名字...

只是看到一顆球在地圖上面移動而已,沒有甚麼太大的差別

仔細看的話你就會發現,事實上這一張地圖,就是用一張黑白灰階的圖片製作而成的



就是這張圖片,而他原始的3D樣子為



經由上面的3D模型,轉換成2D的圖片...

他的做法一般都是制定一個平面,重那個平面往下垂直計算那個點的距離,再把他畫分成255個階級,看他屬於哪個數值...

這樣子做法,看起來就是深度,越深數值越白,越上面越黑,看你是怎麼設定的

將每一個PIXEL都去做計算,在將灰階值,儲存在一張BITMAP上面的點

上述模型,全部做完,就變成上面那張2D圖片...

再來就是如何將地圖恢復原狀呢???

你現在只知道兩個資訊
1. 每個PIXEL的位置
2. 灰階值

而事實上呢,只要需要以上數據就夠恢復原來地圖了


從上面那張圖片,就大概可以看出來了吧

所謂的PIXEL位置,也就是XZ平面上面的座標,而高度呢就是灰階值...

以上就是做簡短的介紹,沒有說的特別深入,當然恢復地圖的方式有很多種,你甚至還可以變換出新的地圖,看你怎麼設定"高度"的取樣值...

在來說一說這樣做有甚麼好處???
你們覺得一個模型FBX或是X FILE,他們的檔案大小,跟一張2D圖片比較,誰會比較大?
當然是3D圖片囉~~

再來,經由CONTENT PIPELINE以後3D模型跟2D圖片,誰會比較大?
當然是3D圖片

所以很多遊戲設計,都用Height Map的方式儲存地圖
像是
Myth、Battlefield 2等眾多遊戲用這種方式製作,當然隨著儲存裝置日異漸大,省那些空間,可能對於一些人來說根本沒有影響,所以還是很多人用FBX或是X建立地圖。

希望以上講解,大家能夠對Height Map有初步的了解

圖片轉至
www.povray.org

wiki - Heightmap

DotBlogs Tags: XNA
posted on 2008/12/5 21:36 | 我要推薦 | 閱讀數 : 1090 | 分類[ XNA ] 訂閱

Comments on this post

# re: XNA - Basic HeightMap (高度映射)

救命幫幫忙, 為啥我自己做了一個, 但是出現

Error loading "terrain". File contains Microsoft.Xna.Framework.Graphics.Texture2D but trying to load as Microsoft.Xna.Framework.Graphics.Model.

 

沒辦法在model上使用2D圖檔呢?!?!

HeightmapCollisionPipeline專案我也加了,

參考我也加了, 是不是我什麼東西沒加?!!?

 

Left by ericKuo on 五月 21, 2009 4:52 下午
回覆

# re: XNA - Basic HeightMap (高度映射)

你的圖片應該是要BMP檔案
CONTENT PROCESSOR要選擇的是HEIGHTMAP的PIPELINE,如果沒有那個選項,則你可能是因為將專案加入以後,沒有將該PIPELINE加入到CONTENT的"參考"中
Left by Stream on 五月 21, 2009 9:44 下午
回覆

# re: XNA - Basic HeightMap (高度映射)

我的圖片是bitmap沒錯, content的參考內也加了HeightmapCollisionPipeline, 但是他就是沒有

HEIGHTMAP的PIPELINE選項, 我用的是網路上下載的那個專案都沒動過!!

 

Left by ericKuo on 五月 22, 2009 9:22 上午
回覆

# re: XNA - Basic HeightMap (高度映射)

你方便將你的專案傳上某個位置給我看看嘛
Left by Stream on 五月 22, 2009 12:05 下午
回覆

# re: XNA - Basic HeightMap (高度映射)

http://cid-0f88d882e3bd268e.skydrive.live.com/browse.aspx/.Public

有個4.zip, 不知道這樣可不可以下載,

我是下載你提供的網站檔案後, 因為他是2005版,

我電腦沒有05版, 我直接轉成VS 2008

感恩

Left by ericKuo on 五月 22, 2009 4:34 下午
回覆

# re: XNA - Basic HeightMap (高度映射)

哈哈, 可以了, 我知道怎麼用了!!

感謝感謝!!!

Left by ericKuo on 五月 22, 2009 5:26 下午
回覆

# re: XNA - Basic HeightMap (高度映射)

Hi, 再問一個問題, 我可以用程式碼去設定我要使用哪種

CONTENT PROCESSOR嗎?!

 

Left by ericKuo on 五月 22, 2009 5:32 下午
回覆

# re: XNA - Basic HeightMap (高度映射)

印象中只能用旁邊的設定
Left by Stream on 五月 22, 2009 9:44 下午
回覆

回應:

Please add 7 and 7 and type the answer here: