我在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