利用噪音生成行进立方体地形?

问题描述 投票:0回答:1

我已经在 C# XNA 中成功创建了一个行进立方体类,并使用 Lib 噪声生成 3d 柏林噪声,但是当我尝试使用柏林噪声的值作为行进立方体的密度来生成地形时,它会生成一大块行进的立方体,内部看似随机的三角形。我将行进立方体分开,并给它任意的 3D 密度数组来运行,这样我就可以确保一切正常并且看起来很好,并且我让地形生成代码生成正常的立方体,并且我得到了一个正常的地形,但问题是每个立方体的角从噪声中获取的值总是从负值转换为正值,速度如此之快,以至于行进的立方体看起来就像一团混乱。

这是我用来生成地形的代码:

 public MarchingCube[, ,] getTerrainChunk(int size, int stepsize)
    {
        MarchingCube[, ,] temp = new MarchingCube[size / stepsize, size / stepsize, size / stepsize];
        for (int x = 0; x < size; x += stepsize)
        {
            for (int y = 0; y <size; y += stepsize)
            {
                for (int z = 0; z < size; z += stepsize)
                {
                    Vector3[] corners = { new Vector3(x,y,z), new Vector3(x,y+stepsize,z),new Vector3(x+stepsize,y+stepsize,z),new Vector3(x+stepsize,y,z), new Vector3(x,y,z+stepsize), new Vector3(x,y+stepsize,z+stepsize),
                       new Vector3(x+stepsize,y+stepsize,z+stepsize), new Vector3(x+stepsize,y,z+stepsize)};
                    float[] densities = { GetDensity(corners[0]),GetDensity(corners[1]),GetDensity(corners[2]),GetDensity(corners[3]),GetDensity(corners[4]),
                                            GetDensity(corners[5]),GetDensity(corners[6]),GetDensity(corners[7])};
                    if (x == 0 && y == 0 && z == 0)
                    {
                        temp[x / stepsize, y / stepsize, z / stepsize] = new MarchingCube(densities, corners, device);
                    }
                    else
                        temp[x / stepsize, y / stepsize, z / stepsize] = new MarchingCube(densities, corners);
                }
            }
        }
    return temp;
 }

GetDensity方法如下:

private float GetDensity(Vector3 point) 
{
  return (float)terrain.GetValue(point));
}

我认为问题是我没有正确使用噪声来获取行进立方体角的密度,但到目前为止我的谷歌搜索结果根本没有多大帮助。那么有人知道如何正确使用噪声来生成平滑的地形吗?或者还有什么可能导致这个问题?

我在https://i.stack.imgur.com/BAzO0.jpg发布了屏幕截图,前两个是使用行进立方体显示的,最后一个是普通立方体。

从图片中我发现行进立方体实际上按照它们被赋予的值应有的方式工作,问题无疑是我的噪音以及我如何使用它。有谁知道 3d 有什么好的资源吗基于噪声的地形生成?

c# xna terrain voxel marching-cubes
1个回答
0
投票

问题是我如何在噪音中阅读,默认情况下我难以置信地“缩小”,因此通过将步长更改为浮点数,然后使用较小的增量,我能够获得所需的结果。基本上“放大”了噪音区域。

© www.soinside.com 2019 - 2024. All rights reserved.