我在Terra3D中的方法是生成隨機的高度值,然後進行3次平滑處理,將一些重新整形寫入算法。改造造成水線下的地形向下移動一點,水線以上的所有東西都會稍微向上移動。其效果雖然是很多山丘和小湖泊。這可能不是你正在尋找的東西。
但是,我不相信我的方法背後的原理不能用來得到你想要的。您可能只需在重塑/平滑算法中寫入更多條件。例如,在較高海拔處減少地形上的平滑量將會創造出更多的岩石山形外觀。然後編寫一個更多涉及的平滑(或高斯)算法,爲更低的海拔進一步伸展可以將這些湖泊拉到一起形成天然河流。
下面是地形代Terra3D如果你有興趣的代碼:
// GENERATE TERRAIN
for (i = 0; i < MAX; i++)
{
for (i2 = 0; i2 < MAX; i2++)
{
if (i<10 || i2<10 || i>MAX-10 || i2>MAX-10)
field[i][i2].y=0;
else
field[i][i2].y=(GLfloat(rand()%151)-75)/50+(field[i-1][i2-1].y+field[i-1][i2].y+field[i-1][i2+1].y+field[i-1][i2-2].y+field[i-1][i2+2].y)/5.05;
}
}
// SMOOTH/RESHAPE TERRAIN
for (int cnt = 0; cnt < 3; cnt++)
{
for (int t = 1; t < MAX-1; t++)
{
for (int t2 = 1; t2 < MAX-1; t2++)
{
field[t][t2].y = (field[t+1][t2].y+field[t][t2-1].y+field[t-1][t2].y+field[t][t2+1].y)/4;
if (cnt == 0)
{
if (field[t][t2].y < -1 && field[t][t2].y > -1-.5) field[t][t2].y -= .45, field[t][t2].y *= 2;
else if (field[t][t2].y > -1 && field[t][t2].y < -1+.5) field[t][t2].y += .5, field[t][t2].y /= 5;
}
}
}
}
這是我10年前寫馬虎代碼。 Terra3D是一個漫長的學習過程,在黑暗中進行實驗和摸索,以產生我期待的效果類型。但也許它會有所幫助。
我找不到我想要的文章,但它基本上使用了一個基於位置的山丘系統來生成漂亮的島嶼。這可能與此處鏈接:http://pcg.wikidot.com/articles 但我cba經歷了他們所有。 – Pod 2009-09-20 16:58:19
對於偉大的鏈接+1。感謝資源Pod。我確實發現他們真的很有幫助。 – Wodzu 2009-09-20 17:47:11
你沒有說爲什麼它不現實,在這些效果圖,河流,邊界,形狀等方面限定了你不滿意的地方......我不喜歡綠色與藍色的比例,太多的綠色沒有形成對比,而且河流是湖泊......所以至少要增加更多的水或一些高度信息,如海灘,三角洲,山峯等,以及更多的海岸線。 – 2014-03-05 10:06:00