c# - 为 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);
}
}
}
我认为它会像那样简单,但我错了,不明白为什么。任何启发将不胜感激,谢谢!
解决方案
啊,在查看了如何声明 ni.lookupTable 之后,我意识到我忘记再乘以一次 3D 的大小。现在是这样声明的,
ni.lookupTable = pools.FloatArrayPool.Pop(ni.noiseGen.Size*ni.noiseGen.Size*ni.noiseGen.Size);
我很抱歉!
推荐阅读
- react-native - 无法读取未定义的属性“寻求”
- android - Android 应用中的跨平台订阅
- c - 与第 3 方库枚举设计问题的接口
- python - 将具有混合(日期时间和整数)值的 Pandas 列仅转换为日期时间
- angular - 如何在Angular中加载延迟加载的块后修复长时间延迟
- python - 将多个文本文件中的特定列合并到一个文件中
- git - 在 Android Studio 3.3.2 中构建 Android 项目后,.gitignore 中存在的文件总是被添加到 git
- javascript - 如何使用按钮单击打开引导模式
- xaml - 如何使用 xamarin 表单在列表视图中添加复选框
- android - 基于字符串数组项,将相同的项显示到下一个片段