2

更新:正式的问题清单:

  1. 2D 噪声实现的浮点值(输入参数和输出)代表什么?- 部分回答,输入是坐标。输出怎么样?另外,我可以使用我的整数作为坐标的浮点数吗?1.0、122.0 等?
  2. 在 2D 噪声发生器中实现种子的好方法是什么?我是否应该使用第三个参数作为种子使其成为 3D 噪声发生器?这是否意味着每个种子都可以产生独特的 2D 噪声?
  3. 与 2d 地图一起,生成位图似乎是沿着相同的路线。如何从输出中生成位图?估计是飘了。

我的问题是剪切和粘贴柏林噪声 2D 实现的浮点值(输入参数和输出)代表什么?我如何从它们生成位图?如果我可以获得某种数据类型的二维数组,我相信我可以弄清楚如何使用它来模拟我的地形。

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

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

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

然后我试着弄脏自己的手,用 Java 编写一些代码,这是我选择的语言。我发现了这个,它让我尝试将作为答案给出的哈希函数作为我的噪声函数,因为我可以在那里使用种子。然后我遇到了一个问题,它没有返回一个浮点数来遵循教程中的其余过程。回到绘图板。在此过程中,我发现了更多有关柏林噪声问题的网站。

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

4

2 回答 2

1

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

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

于 2012-03-12T09:29:41.367 回答
1

1/这些值是形成二维网格的样本随机点之间的线性或三次插值,因此每个点都是随机函数生成的 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/您必须访问位图读写库函数,并写入像素,即获取像素,设置像素。读取和写入位图,以及创建和保存位图文件和文件名。

于 2014-03-05T09:49:15.267 回答