gpt4 book ai didi

c# - 基于位置的一致随机数(不是基于噪声)

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:32 25 4
gpt4 key购买 nike

我正在寻找一种在特定 map 坐标处的两个范围之间选择随机数的好方法,该坐标始终基于该坐标返回相同的数字。

在上下文中,我有一个 map 生成器,它使用柏林噪音来构建它,放置水、草、岩石等,这很好用,但每个瓷砖都可以有替代纹理,例如草地瓷砖可能有 5 个替代纹理它可以使用。我希望能够完全随机地生成其中一个,但它需要在每次播放时保持一致,并且不使用 perlin 噪声,因为这通常会产生一个流(一个纹理中的一些,然后是下一个纹理中的一些等等)

值得注意的是,我不能为此设置一个随机种子,因为世界的那个部分可以随时生成,而不是按特定顺序生成。

我试过类似下面的方法:

public static int PerlinNoiseCalcInt(float x, float y, float size, float power, int min, int max) {
int f = Mathf.RoundToInt(Mathf.PerlinNoise(x / size * power, y / size * power) * max + min);
return f < max ? f : max--;
}

这种作品,但正如您可能期望的那样,它给出了一堆纹理,紧接着是另一堆纹理,我真的很喜欢它看起来非常随机,但每次在那个 map 位置每次都一样.

最佳答案

当您说“一致”时,您是指“确定性”吗?

有很多方法可以做到这一点。您可以只使用任何随机数函数,其中参数是您的坐标的某种组合。

例如:

public int GetTileInt(int x, int y, int seed, int numberOfOptions)
{
return SomeRandomFunction(x^2*y + 2*y^2*x + seed)%numberOfOptions;
}

这将为坐标和种子的每个组合生成一个唯一值,但每次都是相同的。您也可以研究散列的东西,但这不是我的风格。

另一种选择是只对每个图 block 应用一个随机整数,而不考虑任何坐标。然后对于每个图 block ,纹理索引将是可能纹理数的模数,然后只需在该索引处分配纹理。

关于c# - 基于位置的一致随机数(不是基于噪声),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com