问题标签 [procedural-generation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
965 浏览

c# - 使用等离子样式分形生成高度图期间的伪影

今天我花了几个小时研究随机地形生成是如何完成的,在阅读了等离子分形(中点位移和菱形正方形算法)之后,我决定尝试实现一个。我的结果实际上并不可怕,但我有这些可怕的方形/线条/网格类型的人工制品,我似乎无法摆脱!

当呈现为灰度图像时,我的高度图看起来像: 高度图 http://sphotos-d.ak.fbcdn.net/hphotos-ak-ash3/535816_10151739010123327_225111175_n.jpg

显然这涉及到相当多的代码,但我会尝试发布仅相关的代码。例如,我没有发布将其转换为纹理的代码,但别担心,我已经尝试用平滑渐变填充我的高度数组,并且纹理很好:)

我首先将地图的四个角设置为 0 到 1 之间的随机值,然后启动递归位移算法:

TerrainData 只是一个 2D 浮点数组*。Vector2_I 只是我自己的整数向量类。最后四个函数是 MidPointDisplace,它是递归函数,CalculateTerrainPointData 平均 2 个数据值并添加一些噪声,CalculateTerrainPointData2 平均 4 个数据值并添加一些噪声并具有稍高的比例值(仅用于中心点),最后我的噪声函数 atm 只是一些随机噪声,而不是像 perlin 等真正的噪声。它们看起来像这样:

好的,感谢您花时间查看-希望有人知道这种网格状图案是从哪里出现的:)

*edit - 意外写入整数,更正为浮点数

0 投票
0 回答
1547 浏览

java - 城市街道的程序生成?

我已经阅读了 L-Systems,阅读了 Parish & Muller 和 Kelly & McCabe,并尝试实现这一点,但我真的一点运气都没有(我所有的街道都倾向于一个方向,从不分支,等等.)。任何人都可以提供一些源代码,或者某种生成城市街道系统的参考实现(最好沿着 Parish & Muller 的路线,但在这一点上,我会尝试任何东西)。我已经为此工作了好几个星期,但进展不快。

0 投票
1 回答
1911 浏览

c# - 如何使用噪声来生成不同的地形生物群系风格

我目前正在使用值噪声,我相信它与分形布朗运动结合使用以在 3D 环境中生成地形。我从噪声中生成了一个 2D 高度图,其值介于 -1 和 +1 之间。我通常只是将该返回值乘以 10 左右来设置高度并生成连绵起伏的丘陵。

我想做的是以某种方式结合对算法的调用,使某些区域非常丘陵,其他区域非常平坦,而有些则几乎是山区。如果区域之间的边缘非常明显(比如突出的悬崖将它们隔离开来),你如何处理这样的事情?

编辑:这需要在近乎无限的环境中完全程序化。

根据 ananthonline 的回答,我正在对我的噪声发生器进行低频调用作为掩码。对于两种生物群系类型,我取生物群系的“影响”,减去掩码值的绝对值减去掩码上的“位置”,然后再将整个值除以“影响”值。

(Impact- abs(Mask - Location))/Impact

这给了我一个值,当为正时,我可以乘以具有特定频率、幅度等(例如连绵起伏的丘陵或山脉或海洋)的特定噪声调用的返回值。

这里的主要问题是,如果我的掩码返回值 0 到 1 作为示例,我需要(在两个生物群落场景中)将一个生物群落的位置设置为 0.25,另一个设置为 0.75,强度为 0.5每个都让他们正确地融合在一起。至少,如果我想要均匀分布每种生物群落类型并将它们正确地混合在一起。如果我想让山脉出现的频率是连绵起伏的丘陵的两倍,我会很努力。

我这样做希望这是有道理的。数学计算得非常好,但我当然不认为我用我有限的数学背景和知识来解释它。也许一些代码会有所帮助(如果我粗鲁的未注释代码对某人意味着什么),请注意 GetNoise2d 返回的值介于 0 和 1 之间:

如果需要指定上述代码的问题,那么假设使用 10 个不同的生物群系来执行此操作将需要一些极端的想法来考虑确切的“位置”和“影响”值,以确保混合完美无瑕. 我宁愿以这样的方式对其进行编码,以确保已经处理好了。

0 投票
2 回答
1907 浏览

c++ - 粒子沉积地形生成

我正在使用粒子沉积来尝试在程序上创建一些类似火山的山脉,但我从中得到的只是金字塔状的结构。是否有人熟悉该算法,可能能够阐明我可能做错了什么。我现在把每个粒子都放在同一个地方。如果我不这样做,它们就会散布在非常薄的一层而不是任何类型的山上。

这就是所有使用的代码。

0 投票
3 回答
6771 浏览

c# - 如何统一创建侧面可滚动的二维地形?

嗨,我正在尝试构建一个游戏,其中滑冰者将在 2D 和横向滚动的不规则地形上滑冰。我没有得到如何沿 x 轴以不同形状动态实例化地形。我想实现类似http://thegoldenmule.com/labs/TerramorphicGenesisAlgorithms/的东西。请帮忙。

0 投票
1 回答
301 浏览

scala - 使用 BufferedImage 时单纯形噪声显示不正确

经过大量工作,我终于得到了一个可以工作的 Simplex 噪声的平铺版本,但在使用 BufferedImage 时,我似乎无法让它正确记录和显示。每当我尝试创建图像时,最终都会出现黑白带或环,而不是平滑的阴影变化,这正是我所期待的。我猜我没有做一些简单的事情,但对于我的生活,我找不到它。

这是我的代码(其中相当一部分来自 Stefan Gustavson 的 Simplex 噪声实现):

我已经检查了我正在使用的噪声函数的输出值,它还没有返回除 (-1, 1) 独占之外的任何内容。对于单个八度音阶,我提供给图像 ( total) 的值也没有超出 (0,1) 的独占性。

我唯一能看到的问题是 BufferedImage 类型设置不正确,或者total在设置图像中的值时乘以错误的十六进制值。

我查看了 BufferedImage 上的 Javadocs 以了解有关它们接受的类型和值的信息,尽管我发现的任何内容在我的代码中似乎都不合适(不过,我通常对使用 BufferedImage 相当陌生)。而且我尝试过更改十六进制值,但似乎都没有改变任何东西。我发现唯一有影响的是如果我将该(total * 0xffffff).toInt值除以 256,这似乎会使波段变暗,并且在应该的区域上出现轻微的渐变,但是如果我将除法增加太多,图像只是变成黑色。因此,到目前为止,我一直在纠结可能是什么问题。

0 投票
1 回答
260 浏览

c++ - 平整湖泊周围的土地

抱歉,如果该标题不是很具有描述性。无论如何,我正在研究处理随机生成的景观。我制作了湖泊,但由于它们的制作方式,它们经常导致直边/下降,这是不可取的。我正在尝试通过定义最大变化量(因此土地高度的变化不能超过它)来平滑它(如果可能的话,就在造湖之后),如果它变化很大,让它固定土地,如果它是退出美好的。

问题:

大下降

我尝试的修复:

尝试修复

正如你所看到的......它没有工作。我也想到,如果它不得不向下移动,我认为它会被打破,尽管这种情况实际上不应该发生,因为湖泊只会沉没景观。无论如何,这是我尝试的来源:

请注意,这只是右侧,但左侧应该大致相同。我怎样才能正确地做到这一点?

谢谢,如果你能帮忙。

编辑:

我从来没有解决过这个问题。相反,我做了一个递归函数来测量空气,(从某个高度),如果一个空气袋(由土地形成)有足够的,可以装满水。这样做的好处是土地看起来很光滑,因为它没有被改变。

0 投票
2 回答
217 浏览

xna - Applying textures on 3D geometric shapes

I have a question that is bothering me for weeks! Is there any way of applying textures to 3D convex polygons, independently of their orientation in the 3D world. I am working with XNA 4.0 if it's relevant

I'm not expecting an easy way out, just a clean solution to solve my current problem. Does anyone made something similar to that?!

Thanks in advance, for your concern and time!

0 投票
1 回答
1092 浏览

c# - C# 程序生成 - 检查邻居

作为一些程序生成代码的一部分,我有一个函数可以检查网格中的单元格是否有任何相邻单元格。

网格是一个二维数组,如果它被打印出来,它看起来像这样(# = 单元格和 . = 空,边缘周围的 # 是边框):

因此,例如,如果检查单元格 5,5,我的代码将返回 true。

我为检查相邻单元格而编写的代码有效,但没有考虑到它正在检查的单元格是否位于“边缘”(例如 0,0 或 0,1 或 10,10)并且将创建如果它确实检查边缘的单元格,则绑定错误。我不确定如何编写考虑到这一点的代码,任何建议都将不胜感激。

到目前为止,这是我的代码:

另外,我的代码有更高效的版本吗?

谢谢

0 投票
1 回答
90 浏览

image-processing - 更好地理解单纯形噪声

不用说,我最近发现了单纯形噪声。用于绝对不同数量的可能性等的算法非常适合创建纹理、高度图和与时间相关的图形。

我已经在程序中拥有了这个函数,它可以创造奇迹,问题是作为一个“数学家”,我无法忍受不彻底理解这个函数是如何工作的。

基本上我唯一不明白的是“倾斜”坐标是否是简单或正交网格的坐标。而且,如果输入定义了这些网格中的哪一个:简单的或正交的。

我确定我可以弄清楚其余的,但我只是不明白哪个网格属于哪个坐标。此外,任何至少显示可视化逐步过程的视频、书籍、链接都将非常有用。

笔记:

如果出现问题或疑问,请发表评论。谢谢!!!