Articles of perlin noise

单纯形噪声函数的界限查询

如何构造3D单纯形噪声的边界查询? [这或多或less是我最后一个问题的后续] 简单地说,对于我的卷(Unity3d世界空间的一部分)中的任意八叉树节点(立方体),我试图找出在八叉树节点内是否有一个表面(以确定是否需要细分我的八叉树节点) 。 正如另一个问题所解释的,我不能依靠边交叉来检测节点是否包含曲面。 现在,我查询每个Vector3整数坐标在我的音量(适当缩放〜1/50)为一个单一的噪音值。 我被引导到边界查询,而不是通过提供特定坐标来查询特定点,而是查询某个体积(我的八叉树节点)中函数的[min,max] 。 如果min > 0或max < 0 ,我不需要细分,因为曲面在我的节点之外(曲面与具有不同极性/符号的顶点之间的边相交)。 到目前为止我所了解的是什么(我想): 在每个单纯形顶点,值是0 。 这意味着我的最小值不大于0,而我的最大值不小于0.原来,由于我的缩放比例,一个单倍频程的噪音通常只是将2个单纯形顶点放在我的体积中。 这是否意味着我的界限查询将要求我细分每个包含这些单形顶点之一的节点? 这显然是错误的,否则我会无限细分。 如果我的节点中没有任何单形顶点,我仍然需要find我的节点存在的单形的顶点的单位vector。然后,不知何故,我决定了最小/最大。 我想,这将归结为我在… …单纯的性质。如果他们都给予积极/消极的价值观,那么我的界限查询将通过,我不需要细分…对吗? 但是,我怎么计算呢? 为了构造边界查询,我必须find分配给我的节点中find的每个单形顶点的伪随机单位向量。 这使我可以查看节点中find的每个单纯forms中可能值的范围。 (我希望大家不要太困惑) 尽管/因为这一切,我不能为我的生活思考任何algorithm。 我错过了什么? 如果有这方面的资源,请指点他们! 我已经search了每一个关键字加载的短语,我可以想出,但什么也没find。

体素数据中的浮点值是什么意思?

我们知道体素可以用布尔值或浮点值的三维数组表示。 有一个答案完美演示了: 二进制/布尔或浮点体素的区别 。 如果我们使用二进制的方式,我们可能使用一个字节[,,],所以我们有256个插槽。 他们可以用来表示内容。 例如,0可以是空气,1草,2石,3水。 通过这种方式,我们可以定义什么是固体或不固定的颜色在哪里。 但是浮点方式呢? 所以我的问题是: 浮点值在浮点体素中意味着什么? 有没有一种方法可以用它来描述内容和保持地形的平滑? 。 我已经尝试了什么,我得到了什么? 我试图与Marching Cube建立一个网格,里面充满了来自Perlin Noise的 “随机”3d分形。 结果看起来非常好,但现在我应该如何定义什么是什么? (空气,石头,…) 我很确定解决scheme已经在这个答案中得到了回答 。 不幸的是,即使我读了5-6次的答案,我也不明白。 我知道有一个门槛来定义什么是固定的或不固定的。 给我3个for-loop伪代码来填充浮点三维数组可能会有所帮助。

在Perlin噪声中产生随机点?

我正在为我的一个游戏地形生成,并遇到了一个小问题。 游戏中的地形本身在你的角色四处移动的过程中产生。 这意味着,世界上所有的一代人都需要基于某个瓦片或区域(大块)在世界上的位置。 世界一代是坚如磐石,看起来相当华丽! 但是我需要一个组件来完成 – 我需要以某种方式检索Perlin噪声中的一个随机点。 假设我们有这样的事情: int scale = 100; float noise = perlinNoise.noise3(x / scale, y / scale, z / scale) if(noise > .2f) setPixel(x, y, 0xffffff); 我们以像素的forms将结果绘制到屏幕上,试着看看会发生什么。 通过这种方式,我们实现了经常隔开的噪音区域。 现在,我想要做的是随机生成一个点位于上面的“原理图”之后的一大块噪声中。 以上可能看起来是这样的: xxxxxxxxxxxxx xxxxxxxxxxxxx xxxxxoooxxxxx xxxxoooooxxxx xxxxxoopooxxx xxxooooooxxxx xxxxxoooxxxxx xxxxxxxxxxxxx 在上面的代码示例中,如果x不受perlin噪声的影响,并且o受到影响,则o在屏幕上被绘制出来,它们就是上例中的白色像素。 与o和x相反的小p是随机点,我想随机化在Perlin随机噪声中 ,而不必预先生成这个世界。 有没有办法可以实现这一点? 我想到了潜在的解决scheme,把我的思想包裹起来 – 我在网上search,但似乎徒劳无功。 在这个问题上似乎没有写任何东西。

在创建对象之前如何有效地检查对象的可见性?

我正在使用伪随机噪声来创建一个魔法世界。 所以我已经有了我的噪音发生器,并且运转良好。 现在,我只是直接将噪声输出缩放到一个高度,并假设下面的所有内容都是稳定的,我打算稍后再回来添加一些洞穴,坑等等。我现在的问题是采用这些三维整数数组,把它们变成块。 我在那里打了一堵大墙。 在数字列表之后,大块(16x128x16)需要将近30秒才能生成。 这不包括渲染,如果我不一次在块中绘制每个块,那么速度就足够快了。 我的第一个方法是每帧画出2万多块。 我发现这真的很糟糕,因为我得到了2 fps。 然后我决定最好在渲染之前检查块是否被暴露。 那是我开始大幅放缓的时候。 如果我的列表表明存在一个块,那么我会检查数组的值,在我的整数列表的立方体周围的所有六个方向,看看他们是否也拥有一个立方体。 这个效果很好,但正如我所说,我这代人只有一个块大约30秒。 我的曝光检查代码: public bool determineExposed(int x, int y, int z) { try { if (_list[x + 1, y, z] == 1 && _list[x – 1, y, z] == 1 && _list[x, y + 1, z] == 1 && _list[x, y – 1, z] […]

Perlin噪声在较高的z上看起来不相关

我正在体验我的Perlin噪声function,我试图通过改变每帧less量的z值来制作2D噪声的animation。 然而,随着z的增加,结果变得陌生而陌生,看起来像这样: 为什么发生这种情况? 我怎么能解决这个问题? 这是可能是错误的Lua代码(如问): function perlin.fade(t) return t * t * t * (t * (6 * t – 15) + 10) end function perlin.lerp(t, a, b) return a + t * (b – a) end function perlin.grad(hash, x, y, z) local h = hash % 16 local u local v if (h < […]

滚动时Perlin噪声地形问题

我正在使用这个jsp项目的Perlin噪声在Javascript canvas中生成地形。 我有一个点的数组,当一个点离开窗口的左边时,它将被删除,并且新的点被添加到右边。 对于前几个点(在任何点移出窗口的LHS之前),它工作正常,但是一旦我开始从数组的开始删除点并将它们添加到结束Perlin停止工作。 的jsfiddle 有谁知道为什么会发生?

侧滑地形1D柏林噪音

我正在做一个基于磁贴的游戏,并且已经有了一个发生器工作。 但似乎不够stream畅,看起来很现实。 以下是我正在使用的代码: for (int i = 0; i < width; i++) { float y = ClassNoise.PerlinNoise1D(i, 2f, 4); for(int j = 2048+y;j<height;j++) { tiles[i][j] = new Tile(i,j); } } public class ClassNoise { public static float Noise(int x) { x = (x<<13) ^ x; return (float) ( 1.0 – ( (x * (x * […]

具有最佳性能的非平滑噪声?

如何得到像线性插值那样“锯齿状”结果的任何建议都会使用像单纯噪声这样的更快速的algorithm概念,给出值噪声? 单纯的噪音我没有花费足够的时间来理解,而只是使用这里发布的一些非常微小的修改。 这是2D的,目前正在C#中完成。 目的是为了我的地形生成过程的一部分。 public class SimplexNoise { // Simplex noise in 2D, 3D and 4D private static Grad grad3[] = {new Grad(1,1,0),new Grad(-1,1,0),new Grad(1,-1,0),new Grad(-1,-1,0), new Grad(1,0,1),new Grad(-1,0,1),new Grad(1,0,-1),new Grad(-1,0,-1), new Grad(0,1,1),new Grad(0,-1,1),new Grad(0,1,-1),new Grad(0,-1,-1)}; private static Grad grad4[]= {new Grad(0,1,1,1),new Grad(0,1,1,-1),new Grad(0,1,-1,1),new Grad(0,1,-1,-1), new Grad(0,-1,1,1),new Grad(0,-1,1,-1),new Grad(0,-1,-1,1),new Grad(0,-1,-1,-1), new Grad(1,0,1,1),new Grad(1,0,1,-1),new Grad(1,0,-1,1),new Grad(1,0,-1,-1), […]

如何平铺多个程序生成的纹理?

我正在尝试为游戏开发一个程序化的瓦片生成器,主要用于地面的瓦片,而不是使用“手绘”瓦片。 为了达到这个目的,我使用了Perlin噪声和多个参数的正弦波,这已经给了我相当不错的结果。 我不想生成1个瓦片,并且为了一种地面types而永久地重复这个瓦片 ,但是我希望避免重现,所以我生成了n个不同的瓦片。 我现在遇到的问题是我想平铺生成的纹理(平滑过渡)。 目前我有这个: 4个256×256纹理。 我认为一个简单的方法是将不同的图块的位置添加到噪声生成algorithm中,以便在创建4个256×256纹理时,它的行为就像创建一个512×512的纹理,但是某种程度上不起作用如同意。 那么如何平铺这些纹理呢?

Java:2D Sidescroller Terrain

好吧,毕竟这里的编辑是主要的问题。 我如何使用二维单纯形噪声algorithm生成地形,我正在调整旧信息,使其后更容易读取。 我一直在做一些testing,这是迄今为止的结果。 任何帮助表示赞赏。 任何想法,为什么我的代码不工作? 我远没有得到一个好的结果,这是一个图像,我正在使用单纯噪声生成器蒂莫西toerred给我(谢谢:D) 并且Heres是代码: public void GenerateChunk(float offsetX, int amplitude, long seed) { // Its += 16 Because each block is 16 pixels for(int x = 0; x < CHUNK_SIZE * CHUNK_SIZE; x += 16) { PerlinNoise.genGrad(seed); float height = (float) PerlinNoise.noise(x, 0); System.out.print(height); for(int y = 0; y < height * […]