Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用OpenGL实现柏林噪声_Opengl_Graphics_Perlin Noise - Fatal编程技术网

用OpenGL实现柏林噪声

用OpenGL实现柏林噪声,opengl,graphics,perlin-noise,Opengl,Graphics,Perlin Noise,我正在通过一些例子来研究Perlin的噪音@,我忍不住注意到他在Perlin.c中的make3DNoiseTexture使用了noise3ni而不是PerlinNoise3D 为什么呢?柏林的噪声不是应该是不同噪声频率和振幅的总和吗 第二个问题是ni,inci,incj,inck代表什么?为什么使用ni而不是x,y坐标?为什么ni会随着时间而增加 ni[0]+=inci; inci=1.0/噪音3dtexsize/频率; 我看到雨果·埃利亚斯用x,y坐标创建了他的Perlin2D,PerlinN

我正在通过一些例子来研究Perlin的噪音@,我忍不住注意到他在Perlin.c中的make3DNoiseTexture使用了noise3ni而不是PerlinNoise3D

为什么呢?柏林的噪声不是应该是不同噪声频率和振幅的总和吗

第二个问题是ni,inci,incj,inck代表什么?为什么使用ni而不是x,y坐标?为什么ni会随着时间而增加 ni[0]+=inci; inci=1.0/噪音3dtexsize/频率; 我看到雨果·埃利亚斯用x,y坐标创建了他的Perlin2D,PerlinNoise3D也是如此


提前感谢:

如果PerlinNoise3D。。。当你在着色器中使用该噪波纹理时,你希望能够复制和修改PerlinNoise3D的功能。。。直接在着色器中


我猜ni,inci,incj,inck背后的原因是使用x,y,体积的z不能直接给出一个好的结果,因此,通过用频率缩放噪声,可以独立于体积大小调整噪声的分辨率。

我猜测,如果PerlinNoise3D。。。当你在着色器中使用该噪波纹理时,你希望能够复制和修改PerlinNoise3D的功能。。。直接在着色器中


我猜ni,inci,incj,inck背后的原因是使用x,y,体积的z不能直接给出一个好的结果,因此,通过使用频率缩放噪声,可以独立于体积大小调整噪声的分辨率。

我现在明白了原因,并将回答我自己的问题,希望它能帮助其他人

柏林噪声实际上是梯度噪声的合成。在其生成过程中,我们必须使用随机生成的梯度向量计算从输入点的一个角指向输入点本身的向量的点积

现在,如果输入点是一个整数,例如要创建的纹理的xyz坐标,则点积将始终返回0,这将为您提供平坦的噪波。因此,我们使用inci,incj,inck作为替代索引。是的,只是一个索引,没有别的

现在回到问题1,有两种方法实现柏林噪声: 1.分别计算噪波值并将其存储在纹理中的RGBA插槽中 2.在手之前合成噪声,并将其存储在纹理中的一个RGBA插槽中

noise3ni是方法1的实际实现,而PerlinNoise3D。。。后者建议


在我个人看来,方法1要好得多,因为在着色器中如何使用每个倍频程方面,您有了更大的灵活性。

我现在明白了原因,并打算回答我自己的问题,希望它能帮助其他人

柏林噪声实际上是梯度噪声的合成。在其生成过程中,我们必须使用随机生成的梯度向量计算从输入点的一个角指向输入点本身的向量的点积

现在,如果输入点是一个整数,例如要创建的纹理的xyz坐标,则点积将始终返回0,这将为您提供平坦的噪波。因此,我们使用inci,incj,inck作为替代索引。是的,只是一个索引,没有别的

现在回到问题1,有两种方法实现柏林噪声: 1.分别计算噪波值并将其存储在纹理中的RGBA插槽中 2.在手之前合成噪声,并将其存储在纹理中的一个RGBA插槽中

noise3ni是方法1的实际实现,而PerlinNoise3D。。。后者建议


在我个人看来,方法1要好得多,因为您可以更灵活地使用着色器中的每个倍频程。

非常感谢您的见解。我现在了解到使用cjk代替xyz是因为当点乘以梯度向量时,整个整数将产生0。换句话说,cjk只是另一种不使用整数索引纹理的方法。非常感谢您的见解。我现在了解到使用cjk代替xyz是因为当点乘以梯度向量时,整个整数将产生0。换句话说,cjk只是另一种不使用整数索引纹理的方法。我希望我的概念是正确的。如果我得到几票左右,我会选择这个作为正确答案。我建议你回去,对你自己的问题给出一个详细的答案。我希望我的想法是正确的。如果我得到几票左右,我会选择这个作为正确答案。我投票支持你回去,给你自己的问题一个详细的答案。