生成3D噪声的查找表

时间:2018-08-22 19:51:04

标签: c# noise lookup-tables

我无法理解为什么我的查询表不起作用。我目前有一个可以为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);
        }
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

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

我很抱歉!