我是通过一些实施例中研究培林的噪声@ http://dindinx.net /OpenGL/index.php?menu=exemples&submenu=shaders 并不能帮助通知,他在make3DNoiseTexture()用途perlin.c noise3(ni) PerlinNoise3D(...)代替

现在这是为什么?不培林器的噪声应该是不同的噪声的频率和振幅的总和?

Qestion 2是什么呢ni, inci, incj, inck立场?为什么要使用ni代替x,y坐标?为什么ni递增与结果 ni[0]+=inci;结果 inci = 1.0 / (Noise3DTexSize / frequency);结果 我看到雨果埃利亚斯创造了他Perlin2D与x,y坐标,也是如此PerlinNoise3D(...)。

在预先感谢:)

有帮助吗?

解决方案

我现在明白为什么和我要回答我的问题,希望这可以帮助其他人。

培林的噪声实际上是梯度噪声的合成。在其生产过程中,必须从角地板输入点到输入点本身与随机生成的梯度矢量的一个计算向量指向的点积

现在如果输入点是一个整数,比如你想创建一个纹理的XYZ坐标,点产品将始终返回0,这会给你一个平坦的噪音。因此,相反,我们使用inci, incj, inck作为替代指标。是的,只是一个指数,没有别的。

现在回到问题1,有两种方法来实现培林的噪音:点击 分别1.Calculate噪声值,并将其在RGBA时隙存储在纹理,点击 前手2.Synthesize噪声起来,并将它们存储在纹理中的

的RGBA时隙之一

noise3(ni)是实际的实现方法1,而PerlinNoise3D(...)表明后者。

在我个人看来,方法1是要好得多,因为你有更多的灵活性,在您如何在着色器使用的每个音阶。

其他提示

我的猜测对在noise3(ni)使用make3DNoiseTexture(),而是如果PerlinNoise3D(...)是,当您使用噪声纹理着色器要能够复制并直接在着色器修改PerlinNoise3D(...)的功能的原因。

我给后面ni, inci, incj, inck推理的猜测是,使用X,Y,体积Ž不会直接通过与频率缩放的噪声得到了良好的结果,从而代替它的是可以调节的噪声独立于分辨率从卷的大小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top