2

我试图弄清楚我如何——或者至少我可以在哪里阅读更多关于它的信息——创建一个圆形/方形渐变并将数据存储在一个二维数组中。

我的目标是使用带有单纯形噪声的梯度,通过从生成的噪声中减去梯度来创建程序岛。

以下是我正在谈论并试图实现的渐变的图片参考: 方形渐变 圆形渐变

例如,在我在这里找到的博客文章中解释了使用带有噪声的梯度:https ://medium.com/@travall/procedural-2d-island-generation-noise-functions-13976bddeaf9

但它只提到了创建渐变,没有任何关于它应该如何完成的细节。我试过环顾四周,但找不到我要找的东西。

我将不胜感激任何正确方向的提示或指示。

4

1 回答 1

0

我一直在尝试做几乎相同的事情。对于正方形,您可以在这里找到答案:Unity 中的 2D Array Gradient Generation

对于圆圈一:您可以根据每个“像素”与阵列中心的距离生成它。

这段代码在 C# 中,因为这就是我正在使用的,但我认为它足够基本,可以轻松转换。

    int arrayWidth, arrayHeight;
    float[,] gradientArray = new var[arrayWidth, arrayHeight]

    int centerX = arrayWidth / 2 -1; //find center of the array
    int centerY = arrayHeight / 2 -1; //find center of the array

    for (int x = 0; x < arrayWidth; x++)
        {
            for (int y = 0; y < arrayHeight; y++)
            {
                float distanceX = (centerX - x) * (centerX - x);
                float distanceY = (centerY - y) * (centerY - y);

                //find distance from center
                float distanceToCenter = Mathf.Sqrt(distanceX + distanceY);
 
                //divide distance by one of the sides (width or height). 
                //by messing with this line you can easily alter the gradient
                distanceToCenter = distanceToCenter / arrayHeight; 

                gradientArray[x, y] = distanceToCenter; //set value
            }
        }
于 2022-02-01T18:41:52.637 回答