2012-03-09 303 views
2

UPDATE:问题正式名单:的Java柏林噪声二维地形生成

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

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

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

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

首先,我在这里发现了this网站,这似乎是向我解释它的胜利者。然而,然后我想出了另一个问题,我发现问题,但没有完全回答here

然后我试图让我的手变脏,并用Java编写一些代码,这是我选择的语言。我发现this,这让我试着将哈希函数作为答案给出来作为我的噪声函数,因为我可以在那里使用种子。然后我遇到了一个问题,它没有返回一个浮点数来跟随教程中的其他进程。回到绘图板。一路上,我发现许多更多的网站有关于柏林噪音的问题。

我在这里找到一个悬而未决的问题,我已经没有想到的又是因为我没有得到我的执行工作。我再也找不到链接了,但是它还是说了些什么,即使你有一个复制和粘贴的实现,你将什么是浮点数输入到函数中?我被告知我需要在地图上传递我的x和y的INTEGERS。我也从剪切和粘贴实现中获得浮点输出。这些是什么意思?那些2D如何?如果我可以将整体保持为整数,那么在我的大脑中就会有意义,但从某种意义上说,将它们保持为整数对于插值和平滑连续曲线的值并不合理。

+2

请修改您的问题。把你寻求的东西放在最上面,然后解释你已经试过的东西。 – 2012-03-09 10:24:33

+0

[here](http://stackoverflow.com/questions/9546306/perlin-noise-2d-assistance)是我发现的文章提出了类似的问题!它一直没有答案。我提供了更多关于我寻找答案的信息,所以我希望有人花时间回答我的问题。如果我能够理解它,我可以帮助其他人。 – user1258957 2012-03-11 08:09:43

回答

1

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

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

+0

我不打算使用任何形式的缩放。我有一个二维的瓷砖阵列,我想根据高度来确定它是否是海洋,海洋,土地,山丘,山脉等。我选择佩林噪音是因为我需要它是一个连续的功能。 (所以看起来很顺利)我可以输入x,y作为浮点数(0.0,1.0),但输出将是浮点数?我期望输出是一个高度或与高度相等的东西。当基本噪声函数(PerlinNoise函数使用的一个,但我没有手动使用)需要输入时,我应该输入x和y作为浮点数吗?这部分令人困惑。 – user1258957 2012-03-13 10:28:21

+0

大多数做地形的人需要3D地形,所以能够放大表面的任何一点是非常重要的。此外,当您使用噪声来计算UV贴图的纹理时,需要使用范围为[[0,1]'的坐标。 API可能会让你感到困惑,但不是每个人都有你的用例。 – 2012-03-13 13:00:49

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 /你有存取权限读取位图,写库函数,并写出像素,即获得像素,设置像素。读取和写入位图,并创建并保存位图文件和文件名。