【问题标题】:How do I map a perlin noise function (libnoise) to an array of tiles?如何将 perlin 噪声函数 (libnoise) 映射到瓦片数组?
【发布时间】:2014-06-29 11:55:11
【问题描述】:

如果输入值是整数,libnoise 的 Perlin.GetValue(x, y, z) 方法(使用 C# 端口)返回 0。我怎样才能将二维瓷砖数组(因为数组的索引是整数)映射到噪声值?这对我来说毫无意义,因为即使是 3D 地形最终也取决于整个整数值。对于生成此类 3D 景观的人来说,地形中的这些位置是否总是被限制为 0 值?

编辑:我应该提到我正在使用一个块系统,所以我循环遍历每个块的 [32, 32] 瓦片数组以获取 Perlin 噪声值。我希望通过将世界空间中的块的偏移量添加到数组中图块的 [x, y] 值,我可以拥有连续地形。无论如何,我尝试了这样的方法,但噪声函数仍然为零:

double temp = generator.GetValue((x + offsetX) / ChunkSize, (y + offsetY) / ChunkSize, 0);

编辑 2: 我将噪声函数的值输出到 32x32 纹理并将它们彼此相邻放置。尽管为块的偏移量调整了 x 和 y 值的输入,但噪声正在产生,但它不是连续的。

编辑 3: 问题已解决。我的偏移值设置为 pixel 坐标而不是 tile/chunk 坐标。我将块的索引乘以块大小乘以图块大小,而不仅仅是块大小(以图块为单位)。

【问题讨论】:

    标签: c# 2d game-engine noise tiling


    【解决方案1】:

    Perlin.GetValue(x, y, z) 的输入值是双精度值,在技术上不限于 0.0-1.0 范围,但我建议您将所有数组索引除以该维度中的数组长度,这样它们都属于范围为 0.0-1.0,你应该得到很好的噪声值,如果噪声太大,你可以通过缩放来调整索引,例如在 0.0 到 2.0 之间缩放可能会产生更平滑的噪声。

    【讨论】:

    • 我可能应该提到我使用的是块系统,所以我循环遍历每个块的 [32, 32] 瓦片数组以获取 Perlin 噪声值。我希望通过将世界空间中的块的偏移量添加到数组中图块的 [x, y] 值,我可以获得连续地形。无论如何,我尝试了这样的事情,但仍然从噪声函数中得到零:double temp = generator.GetValue((x + offsetX) / ChunkSize, (y + offsetY) / ChunkSize, 0);
    • 如果(x + offsetX) / ChunkSize 不是应该为您提供值的整数。需要注意的另一件事是 GetValue 函数的输出在 0.0 到 1.0 范围内,因此您可能需要对其进行缩放。
    • 好吧,如果它是第一个块,并且它在数组的 x 轴上的索引 1 处,它应该是 (1 + 0) / 32,它应该返回一个双精度数。跨度>
    • 啊,我不得不将值强制转换为双精度值。它现在正在输出。现在来看看地形的样子。
    • 好吧,我将噪声函数的值输出到 32x32 纹理并将它们彼此相邻放置。尽管调整了块偏移的输入和 x 和 y 值,但正在产生噪声,但它不是连续的。
    猜你喜欢
    • 2011-08-30
    • 2013-06-30
    • 1970-01-01
    • 2012-02-23
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多