Minecraft之类的游戏如何通过种子数生成整个世界?


32

我想用生物群落创造一个完全独特的世界(就像Minecraft和类似游戏所做的那样)。我不明白它们是如何从单个“种子”编号生成这些整个世界的。有人可以提供该技术的基本概述吗?


13
Notch实际上写了一篇有关地形生成的博客文章,由于新代码包含了生物群系和FRACTALS以及其他类似的向导,因此现在已经完全过时了。也不存在第2部分。

Answers:


27
  1. 如何从种子生成随机X? 种子值是随机数生成器的初始状态。在大多数编程语言中,您可以设置此种子。例如,C使用srand()。如果您没有指定特定的种子作为开始,通常将时间戳值用作种子。这样,每次运行时,随机数都是不同的。

    // C example
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    srand(1);
    for(i=0; i<3; i++)
        printf("%d\n", rand());
    
    1270216262 
    1085377743 
    1481765933
    1270216262 
    1085377743 
    1481765933

    如您所见,每当您使用特定值进行种子(我使用1作为种子)时,所得随机数都是相同的。

  2. 您如何基于随机数创建“我的世界”生活世界? Notch对此发表了一篇文章。 另外,您可以查看其他人关于“类似于minecraft的世界”的教程。我喜欢这一点,例如:在OpenGL 4中类似于Minecraft的渲染。基本思想是使用Perlin噪声(或单纯形噪声)。这是一个有关噪声函数的好问题:了解Perlin噪声


1
实际上,您将无法使用Perlin Noise,恐怕我的世界飞机有悬垂的悬崖,洞穴等,而PN无法进入。
jcora 2012年

6
Perlin噪声只是一个噪声系统,您可以将其用作较大的地形生成方法的一部分。例如。您可以使用3D perlin噪声以及与海拔相关的阈值来生成悬崖,洞穴等。(编辑-实际上,我从答案的链接中看到,Notch在某一点上正是在这样做。)
Kylotan

1
+1 Kylotan。以下是Notch博客的引文:“具体来说,[2D Perlin高度图]无法生成任何悬垂。因此,我将系统切换为基于3D Perlin噪声的类似系统。我没有对“地面高度”进行采样将噪声值视为“密度”,其中任何低于0的东西都是空气,任何高于或等于0的东西都会被磨碎。”
吉米
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.