2011-07-06 88 views
4

我對生成我正在處理的2D遊戲的3D高度貼圖感興趣。我使用它來創建陸地就像在我的世界或矮人要塞,並在固定的尺寸在這之前,但只是做:生成平鋪噪聲貼圖「即時」

http://www.freewebs.com/shadowphantom/Results.html

我現在明白,我應該尋找到培林或單純的噪音。但我現在困惑於如何將Perlin或Simplex噪聲應用於二維高度數組。

任何幫助,這將大大讚賞,因爲我不知道該怎麼做了。 Octave這個詞不在樂譜上讓我害怕。哈哈哈

+0

看這表明使用4D噪音功能答案: http://gamedev.stackexchange.com/questions/23625/how-do-you-generate-tileable-perlin-noise –

回答

1

我認爲你的問題可能措詞不正確。高度貼圖本質上是2D的,您可以使用它來生成3D地形(網格)。

http://en.wikipedia.org/wiki/Heightmap

如果是這樣的話...那麼你可以使用柏林噪聲函數來創建一個2D圖像,並使用它的高度圖。例如,如果您不確定創建的內容,可以使用GIMP或Photoshop或類似工具在2D Canvas上創建Perlin噪聲。

我的世界利用佩林噪聲函數來創建一個三維立方體的噪音。因此,如果高度圖是二維柏林噪音,我的世界就是三維柏林噪音。你也可以產生一維柏林噪音。

Perlin噪聲函數的好處在於,您可以通過數學控制紋理的「分辨率」和「偏移」,從而創建無縫環境。我相信「我的世界」使用柏林噪音作爲基礎,然後移動到一些元胞自動機來完成觸摸。

我不熟悉單工噪音。

編輯:這裏是一個鏈接來測試一些數學函數(加工) http://processing.org/learning/basics/noise2d.html

+0

我熟悉的生成噪聲本身,但我的問題已經在飛行創造它。當你接近他們,但無縫瓷磚的Minecraft只生成塊。這是即將發生的效果。 鏈接進入我的程序運行的圖像,它有2塊128×128地磚,但他們不這樣做瓷磚。 [鏈接](http://i1178.photobucket.com/albums/x379/Jay_PC000/Durr2.png) –

+0

我知道這不是您正在查找的語言,但是如果您可以從AS3 BitmapData複製方法功能類。它們允許拼接,但我發現,baseX和baseY可以給我說,「平鋪」的效果(如最好的,因爲它可以是瓷磚的質地能夠創建一個)。但是,每次調用都必須重新生成紋理。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#perlinNoise() – avanderw

1

沒錯,你必須尋找培林/單噪音。把它看作一個函數f(x,y,...)(像你想的那麼多的變量),它將輸出隨機看的噪聲。與純噪聲的區別在於它對漸變起作用,因此它看起來更自然,因爲它「繪製」了梯度而不是具有高局部變化的普通噪聲。單純的噪音與Perlin的幾乎相同,但它將simplexes中的空間分開,而不是像Perlin那樣在n維網格中操作。這減輕了計算成本,並有更多benefits

它看起來很可怕,但實際上很簡單。你害怕八度音,但它們與音樂中的八度音幾乎相同:只是較高(或較低)的頻率噪聲與原始輸出混合在一起。談論樂譜,它就像同時玩C4和C5一樣。它仍然是C,但它增加了一些風味(波形中的小尖峯)。不要害怕並繼續研究,這並不難。

關於瓷磚:

如果你的意思是線性平鋪(就像我的世界一樣),你只需要使用相同的種子噪聲算法。只要你接近你的新界限,就生成新的數據塊,並且它會完美平鋪(就像你無限填充噪音一樣。)

如果你的意思圓環平鋪(重複地磚,覺得吃豆子比如)我找到了最好的解決方案是產生噪音的瓷磚,然後邊界附近插值就好像它是瓷磚。噪聲會變形,以配合雙方,這將是完全平鋪。