【问题标题】:Java Perlin Noise for 2D terrain generation用于 2D 地形生成的 Java Perlin Noise
【发布时间】:2012-03-09 10:06:19
【问题描述】:

更新:正式的问题清单:

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

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

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

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

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

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

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

【问题讨论】:

  • 请编辑您的问题。将您寻求的内容放在顶部附近,然后说明您已经尝试过的内容。
  • here 是我发现的那篇提出类似问题的文章!它一直没有得到答复。我提供了更多关于我试图找到答案的信息,所以我希望有人能花时间回答我的问题。如果我能理解它,我可以帮助这个人。

标签: java 2d generator terrain perlin-noise


【解决方案1】:

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

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

【讨论】:

  • 我不打算使用任何形式的缩放。我有一个二维瓷砖阵列,我希望根据高度确定它是否是海洋、海洋、陆地、山丘、山脉等。我选择 Perlin Noise 是因为我需要它是一个连续函数。 (所以看起来很平滑)我可以将 x,y 输入为浮点数(0.0, 1.0),但输出是浮点数?我希望输出是一个高度或等于高度的东西。当基本噪声函数(PerlinNoise 函数使用但我不手动使用的函数)采用整数时,我是否应该输入 x 和 y 作为浮点数?这部分令人困惑。
  • 大多数做地形的人都需要3D地形,所以能够放大到表面的任何一点是非常重要的。此外,当您使用噪声计算 UV 贴图的纹理时,您需要在[0,1] 范围内的坐标。 API 可能会让您感到困惑,但并不是每个人都有您的用例。
【解决方案2】:

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/您必须访问位图读写库函数,并写入像素,即获取像素,设置像素。读取和写入位图,以及创建和保存位图文件和文件名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2020-08-30
    • 2014-02-17
    • 1970-01-01
    • 2012-08-20
    • 2015-03-20
    相关资源
    最近更新 更多