用于2D地形生成的Java Perlin Noise

时间:2012-03-09 10:06:19

标签: java 2d generator terrain perlin-noise

更新:正式的问题清单:

  1. 2D噪声实现的浮点值(输入参数和输出)代表什么? - 部分回答,输入是坐标。输出怎么样?另外,我可以使用我的整数作为坐标的浮点数吗? 1.0,122.0等?
  2. 在2D噪声发生器中实现种子的好方法是什么?我是否应该使用第3个参数作为种子使其成为3D噪声发生器?这是否意味着每颗种子都能产生独特的2D噪声?
  3. 与2d地图一起生成位图似乎沿着相同的路线。 如何从输出中生成位图?可能是浮动。
  4. 我的问题是剪切和粘贴perlin噪声2D实现的浮点值(输入参数和输出)代表什么?我怎么能从他们生成位图?如果我能得到一些数据类型的二维数组,我相信我可以弄清楚如何使用它来模拟我的地形。

    而且,我会使用剪切和粘贴实现,如果我可以确保我可以为它们播种值。这是问题的另一部分,我发现here是一个没有答案的问题。 - 在噪声发生器中实现种子的好方法是什么?

    好的,我知道这个问题已被多次询问过,所以让我解释一下我研究和发现的问题。

    首先,我在这里找到了this网站,这似乎是向我解释它的赢家。然而,我接着提出了另一个问题,我发现了这个问题,但没有完全回答here

    然后我试着弄脏我的手并用Java编写代码,这是我选择的语言。我找到this,让我尝试将哈希函数作为答案作为我的噪音函数,因为我可以在那里使用种子。然后我遇到了一个问题,即它没有返回浮点数来跟随教程中的其余进程。回到绘图板。在此过程中,我发现了许多有关perlin噪音问题的网站。

    我在这里找到了一个未解决的问题,我还没有想到,因为我没有让我的实施工作。我找不到链接了,但它说了一些东西,即使你有一个复制和粘贴的实现你放入函数的浮点输入是什么?我被告知我需要在地图上传递我的x和y的INTEGERS。我也从剪切和粘贴实现中获得浮点输出。这意味着什么?这些2D怎么样?如果我可以将事物保持为整数,那么它在我的大脑中是有意义的,但在某种程度上,我认为将它们保持为整数对于插值和平滑连续曲线的值是不合理的。

2 个答案:

答案 0 :(得分:1)

据我了解代码,这些只是您想要值的坐标。

除非你想支持没有抖动的缩放,否则使用float似乎没有意义。使用float值,您可以通过计算中间值轻松放大横向。

答案 1 :(得分:1)

1 /这些值是在形成2d网格的样本随机点之间的线性或三次插值,因此每个点是由随机函数生成的4个预定的非计算最近点之间的计算平衡。

2 /这很棒:

function rndng ( n: float ): float
{//random linear graph -1, 1
    var e = ( n *122.459)%1;
    return  (e*e*143.754)%2-1;
}

function rnd2d ( n: float, m: float ): float
{//random 2d gooed enough for mountains -1, 1
    var e = ( n*m *31.178694)%1;
    return  (e*e*137.21321)%1;
}

如果速度不是问题,你可以将5-10个乘以超级随机函数,否则它是cpu上最快的函数。

3 /你必须访问位图读写库函数,并写入像素,即获取像素,设置像素。读取和写入位图,以及创建和保存位图文件和文件名。