首页 > 解决方案 > 为 3D 噪声生成查找表

问题描述

我无法理解为什么我的查找表不起作用。我目前有一个可以生成 2D 噪声表,效果很好。

int xOffset = chunk.Pos.x;
int zOffset = chunk.Pos.z;

// Generate a lookup table
int i = 0;
for (int z = 0; z<ni.noiseGen.Size; z++)
{
    float zf = (z<<ni.noiseGen.Step)+zOffset;

    for (int x = 0; x<ni.noiseGen.Size; x++)
    {
        float xf = (x<<ni.noiseGen.Step)+xOffset;
        ni.lookupTable[i++] = NoiseUtils.GetNoise(noise.Noise, xf, 0f, zf, 75f, 100, noise.Gain);
    }
}

当我尝试遍历 y 轴时,它不起作用。引发索引超出范围异常。下面是尝试的 3D 查找表。

int xOffset = chunk.Pos.x;
int yOffset = chunk.Pos.y;
int zOffset = chunk.Pos.z;

// Generate a lookup table
int i = 0;
for (int z = 0; z<ni.noiseGen.Size; z++)
{
    float zf = (z<<ni.noiseGen.Step)+zOffset;

    for (int y = 0; y<ni.noiseGen.Size; y++)
    {
        float yf = (y<<ni.noiseGen.Step)+yOffset;

        for (int x = 0; x<ni.noiseGen.Size; x++)
        {
            float xf = (x<<ni.noiseGen.Step)+xOffset;
            ni.lookupTable[i++] = NoiseUtils.GetNoise(noise.Noise, xf, yf, zf, 75f, 100, noise.Gain);
        }
    }
}

我认为它会像那样简单,但我错了,不明白为什么。任何启发将不胜感激,谢谢!

标签: c#noiselookup-tables

解决方案


啊,在查看了如何声明 ni.lookupTable 之后,我意识到我忘记再乘以一次 3D 的大小。现在是这样声明的,

        ni.lookupTable = pools.FloatArrayPool.Pop(ni.noiseGen.Size*ni.noiseGen.Size*ni.noiseGen.Size);

我很抱歉!


推荐阅读