![]() |
1
5
通常,所有地形/世界生成器都按照您描述的方式工作—它们能够从非常有限的输入数据(一组参数)生成大量(随机的)世界。 所以,你可能想对你的问题做进一步的限制。 如果有什么对你有用,或者你只是在乞求研究——看看不同的关注点和方法 here .
再看一看 procedural generation (尤其是“请参阅”和“外部链接”)。 terrain synthesis 在这里,你基本上混合和匹配真实的地形样本与某种变换操作-这提供了真实的期待地形所需的属性。 编辑 这里有一个 implementation 中的“等离子体分形”(中点位移) processing . 如果这对您来说足够好,那么您可以修改算法以允许它生成网格的任何部分(我有一种感觉,它将归结为散列坐标以获得连接线周围或任何地方的随机数种子)。 此外,您还可以使用此方法处理不同层次的细节,以便生成更接近视点的细节。 |
![]() |
2
2
看看柏林噪声,它是一种确定性随机数据,以它的发明者肯·柏林命名。如果你搜索“柏林噪音”或“肯柏林”,你会发现大量的文章程序纹理和景观生成。 |
![]() |
3
2
一种简单的方法是等离子云算法,也称为 Midpoint displacement algorithm . 总体思路是:
随机值由伪随机数生成器生成。如果您在开始时给出特定的种子,则始终会生成相同的数字序列。
等离子云提供了相当逼真的景观,但从长远来看,它们变得枯燥乏味。因此,还可以使用更复杂的算法(Perlin噪声、脊Perlin等)。要获得更多的变化,可以使用一个分形(分辨率较低)来调整另一个分形的参数,以计算实际值。
使用分形和其他程序方法生成景观的程序的一个很好的例子是 Terragen . Terragen生成照片级真实感图像,因此速度很慢,但它有OpenGL预览,可以动态创建景观。 编辑: 这是因为它通常使用随机数生成器,它依赖于以前的随机数值。 但是,您并不需要真正统计上良好的随机数生成器来生成地形。 类似这样的(未经测试):
上述是从实际的随机数发生器修改,使种子是从x和y计算。但也许更简单的函数就足够了。 编辑2 :创建 无限世界 然后开始用等离子云算法分割正方形。 你只需要分割和计算那些你感兴趣的方块,这样你就能很快到达目标区域(这很像二进制搜索)。 |
![]() |
4
1
你得到的几乎是唯一的方法-基本上你已经创建了一个函数,f,它给出了f(x,y)的地理数据。当然,您可以使用几个函数来构建地形。
|
![]() |
5
0
上面有一些文件 here.
你提到了柏林噪声,而且效果很好,特别是当你需要生成拓扑上不等同于平面的地形时。
The Science of Fractal Images 有一个关于光谱合成的部分,可以让你根据所需的分形维数调整结果。问题是很难在平面或圆环体上生成其他地形。 |
![]() |
lagivan · 如何使用map参数测试XQuery函数 10 年前 |
![]() |
sagar · 我们可以在其他映射中使用嵌套映射作为键吗? 10 年前 |
![]() |
user2906420 · 创建传单自定义复选框控件 10 年前 |
![]() |
Ali-Alrabi · 要根据对象键对地图进行排序 11 年前 |
![]() |
SimplGy · javascript中按对象引用哈希 11 年前 |
![]() |
city · 如何在C++映射中提取具有相同前缀的记录? 11 年前 |
![]() |
alvas · 使用带有附加参数的map-python 11 年前 |
|
Bapho · ArrayList还是Map?还有关于如何存放孩子的帮助 11 年前 |