2011-08-26 76 views
0

假設您有一個立方體的3d盒子,每個立方體有3個索引:(x,y,z)和1個額外的屬性來指定它是代表陸地還是空氣。3d希爾生成算法?

假設我們有一個3d數組來表示這個立方體盒,每個立方體都是3d數組中的一個元素。

以下數組,例如,將代表一個碗形一塊土地:

y=0:   
0 0 0 0 0  
0 0 0 0 0 
1 1 1 1 1 
1 1 1 1 1 

y=1: 
0 0 0 0 0 
0 0 0 0 0 
1 0 0 0 1 
1 1 1 1 1 

y=2: 
0 0 0 0 0 
0 0 0 0 0 
1 0 0 0 1 
1 1 1 1 1 

y=3: 
0 0 0 0 0 
0 0 0 0 0 
1 1 1 1 1 
1 1 1 1 1 

什麼是一種算法,使得給定的選擇框將產生丘陵f頻率,並用的h平均高度,v身高的平均變化?

我們可以假定邦定盒的最低級別是「基準」或「海平面」。

function makeTrees(double frequency, int height, double variation) 
{ 
    //return 3d array. 
} 

我在寫我的世界MCEdit過濾器插件:P

回答

2

簡單的方法就是將問題分解爲三個部分:

  1. 寫一個程序來生成一個立方體高度爲h的山丘。通過使這個簡單的錐形開始(與頂角玩,直到你找到的東西,看起來賞心悅目)

  2. 生成一組HV和H + V n之間的高度,用你選擇的隨機數發生器

  3. 將n座山隨機放置在您的立方體上。它們是否相交併不重要 - 事實上,它會導致更好看的範圍。

不過,我也建議放棄這種方法,而簡單地生成您的邊界立方體內的fractal terrain,然後離散它。你可以玩分數發生器的參數來限制高度和方差。

1

假設你想頻率f的正弦丘陵(或更確切地說,wavenumberf,因爲「頻率」通常用於時間量)作爲半徑r = sqrt(x^2+y^2)從中心的函數:

定義像的閾值函數這樣的:

enter image description here

任何元素(x,y,z)z < z_m將土地,其餘的將是空氣。

+1

你不這樣說你的問題,但現在我覺得你想隨機看山... –

+0

是啊隨機看山是首選。我想給我的土地一些隨機的高度,使它看起來更自然 –