python - 如何使用noise.py模块选择种子

标签 python python-3.x procedural-generation perlin-noise

如何在 python 中选择噪声模块的种子?

我有这段代码:

from noise import snoise2
terrainTiles[varX][varY].set_elevation(snoise2(x=varX/20,y=varY/20,octaves=1))

它确实会产生适当的噪音;但是,我无法更改种子。我已经搜索了几个小时但尚未找到解决方案。谢谢!

该函数的更简单示例:

from noise inport snoise2
print(snoise2(10,10))

解决方案

我找到了一个独立于noise.py的解决方案。我使用了在github上找到的这个脚本:https://gist.github.com/eevee/26f547457522755cb1fb8739d0ea89a1

这也没有种子函数,但是,它具有无偏差函数,因此远处的坐标仍然具有适当的噪声。我使用了 3 维噪声函数,其中 3 维值本质上是种子。代码如下:

#generate world seed
worldSeed = random.randint(0, 100000000)

#generate noise objects. I hate this but im ghettoing it so that the 3rd dimension value is essentially the seed, I hate this but it works
elevationNoise = noise.PerlinNoiseFactory(dimension=3, octaves=1, unbias=True)

并将其应用于一个值:

terrainTiles[varX][varY].set_elevation(elevationNoise(varX/20,varY/20,worldSeed)*1.15)

最佳答案

可以说没有种子参数,但是有一个您可以修改的基本参数,它指定噪声坐标的偏移量。例如:

import random
from noise import snoise2

seed = random.random()
print snoise2(10, 10, base=seed)

其中基数需要 float

因此,对于您的第一个示例,您应该能够将 base=seed 添加到您的 snoise2(..) 中:

terrainTiles[varX][varY].set_elevation(snoise2(x=varX/20,y=varY/20,octaves=1, base=seed))

关于python - 如何使用noise.py模块选择种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50082447/

相关文章:

python 如何获取导入包中运行脚本的文件名

Python Pandas、Dataframe 和从 excel 文件中读取

python - 证书验证失败 (_ssl.c :645)>” for one particuar domain

python - 使用柏林噪声按程序生成海拔明显较高的区域

python - 系统托盘工具提示中的 PyQt RichText 格式化

python - cv2.fitLine() 方法抛出的奇怪错误

python - 如何使用 Pandas DataFrame 有效地映射值(来自 CSV 文件)?

java - 程序 map 生成

c - 如何用C语言制作世界地图?

python - 在没有数据库的情况下在 Django 中进行身份验证