【问题标题】:Perlin Noise: Calculating pseudorandom gradients of grid pointsPerlin Noise:计算网格点的伪随机梯度
【发布时间】:2012-11-10 23:16:43
【问题描述】:

我似乎在理解this Perlin Noise 文章时遇到了一些问题。我需要一些帮助来理解如何计算每个边界点的伪随机梯度。作者给出的函数:

g(xgrid, ygrid) = (gx, gy)

然后他给出了图像:

我理解文章的其余部分,但我不知道他是如何从每个边界点生成这些随机梯度的。协助将不胜感激。谢谢!

【问题讨论】:

    标签: random vector gradient noise perlin-noise


    【解决方案1】:

    但我不知道他是如何从每个边界点生成这些随机梯度的。

    从文章中,它使用了一个总是相同种子的伪随机数生成器,并且总是在同一个网格上计算它,所以

    我们的意思是g具有随机性的外观,但有重要的考虑 它总是为同一个网格点返回相同的梯度,每次它 计算出来的。同样重要的是,每个方向都有平等的机会 采摘。

    所以它可能会做类似的事情

    srand(CONSTANT_VALUE);
    
    for (y = 0; y < GridHeight; y++)
    {
        for (x = 0; x < GridWidth; x++)
        {
            r1 = rand();
            r2 = rand();
            gradient[y][x] = some_function(r1, r2);
        }
    }
    

    所以每个点的梯度是伪随机的,对于相同的 x 和 y,它总是相同的,并且分布均匀。然后它访问矩阵gradient 来运行其余的计算。

    【讨论】:

    • 很好的答案,但在我见过的所有 Perlin Noise 实现中,都没有使用过类似的东西。 “渐变”似乎不是真正的渐变。但我不确定。
    • 同意它们看起来不太像渐变 - 我宁愿称它们为 vectors。甚至 versors,它们看起来都是固定长度的。不过,这就是他所说的:-D
    • 我认为它们是梯度,因为它们代表了该点噪声的变化率,就像“正常”向量一样。固定长度有助于使噪声的最大值保持一致。如果它们真的是随机的,噪音就会有暗淡的地方。我想。
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2017-12-05
    • 2012-03-21
    • 2015-01-12
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多