gpt4 book ai didi

c++ - 平铺单纯形噪声?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:04 25 4
gpt4 key购买 nike

我(作为爱好者)一直对伪随机噪声生成很感兴趣,特别是 Perlin 和 Simplex 算法。 Simplex 的优势在于速度(尤其是在较高维度时),但 Perlin 可以相对容易地平铺。我想知道是否有人知道平铺单纯形算法?固定维度可以,泛型更好;伪代码可以,c/c++更好。

最佳答案

只需像在 Perlin 中仅在倾斜后进行的方式一样平铺噪声。您可以通过修改获取排列的部分来执行此操作,以便在添加到偏移量之后(而不是之前)执行 mod 256(或 & 255,无论您使用什么)以从基角获取其他角。这是 HLSL 中修改后的代码位:

uint3 iIdx0 = p0SI % 256;
uint3 iIdx1 = (p0SI + pI1) % 256;
uint3 iIdx2 = (p0SI + pI2) % 256;
uint3 iIdx3 = (p0SI + 1.0f) % 256;
uint iGI0 = gPerm[ iIdx0.x + gPerm[ iIdx0.y + gPerm[ iIdx0.z ] ] ] % 12;
uint iGI1 = gPerm[ iIdx1.x + gPerm[ iIdx1.y + gPerm[ iIdx1.z ] ] ] % 12;
uint iGI2 = gPerm[ iIdx2.x + gPerm[ iIdx2.y + gPerm[ iIdx2.z ] ] ] % 12;
uint iGI3 = gPerm[ iIdx3.x + gPerm[ iIdx3.y + gPerm[ iIdx3.z ] ] ] % 12;

p0SI 是角点 0 点,pI2 和 PI2 是按通常方式计算的到角点 1 和角点 2 的 vector 。请注意,在 HLSL 中,标量会在混合运算符中自动提升为 vector ,因此例如 1.0f 实际上是 (1.0,1.0,1.0)。我只是想出了这个平铺的东西,但显然它有效。如果你需要遮蔽一个大行星或一些狗屎,但你的卡上只有单一精度,还有几个步骤。打我。

编辑:您再考虑一下就知道了,我认为您不必更改任何内容。我认为它在实现时自动以 256 个单位平铺。

关于c++ - 平铺单纯形噪声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313259/

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