Minecraft gibi oyunlar tüm dünyaları tohum sayısından nasıl elde eder?


32

Biyomlarla tamamen benzersiz bir dünya yaratmak istiyorum (Minecraft ve benzeri oyunların yaptığı gibi). Bu dünyaları nasıl tek bir "tohum" sayısından ürettiklerini anlamıyorum. Birisi tekniğe temel bir genel bakış sağlayabilir mi?


13
Notch aslında yeni nesil biyomlara ve FRACTALS'a ve bu tür sihirbazlıklara sahip olduğundan, artık tamamen eski olan arazi üretimi hakkında bir blog yazısı yazdı . Asla bir bölüm 2 de olmadı.
bir kedi

Yanıtlar:


27
  1. Bir tohumdan rastgele X'i nasıl üretiyorsunuz? Bir tohum değeri, rasgele sayı üretecinin başlangıç ​​durumudur. Çoğu programlama dilinde bu tohumu ayarlayabilirsiniz. Örneğin, C kullanır srand(). Başlamak için belirli bir tohum belirtmezseniz, genellikle tohum olarak bir zaman damgası değeri kullanılır. Bu şekilde, her çalıştırışınızda rastgele sayılar farklıdır.

    // 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

    Gördüğünüz gibi, ne zaman belirli bir değerde tohum ekersen (tohum olarak 1 kullanırım), elde edilen rasgele sayılar aynıdır.

  2. Rasgele sayılara dayanan bir minecraft-life dünyasını nasıl yaratırsınız? Notch'in bu konuda bir mesajı var. Ayrıca, diğer insanların öğreticilerini "Minecraft benzeri dünyalar" hakkında da inceleyebilirsiniz. Bunu sevdim, örneğin: OpenGL 4'te Minecraft benzeri render . Temel fikir, Perlin gürültüsünü (veya tek yönlü gürültüyü) kullanmaktır. Gürültü fonksiyonlarıyla ilgili güzel bir soru: Perlin Gürültüsünü Anlamak


1
Aslında, Perlin Gürültüsünü kullanamayacaksınız, korkarım minecraftın üzerinde kayalık uçurum, mağaralar vb. Var ve PN buna giremez.
jcora

6
Perlin gürültüsü, daha büyük bir arazi oluşturma yönteminin bir parçası olarak kullanabileceğiniz bir gürültü sistemidir. Örneğin. (- aslında, ben tam Çentik bir noktada ne yaptığını olan cevap bağlantıdan görüyoruz. Edit) Sen vs. uçurumlar, mağaralar oluşturmak için bir irtifa bağımlı eşik değeri ile gürültü perlin 3D kullanabilirsiniz
Kylotan

1
+1 Kylotan. Here's the quote from Notch's blog: "Specifically, there’s no way for [2D Perlin heightmap] to generate any overhangs. So I switched the system over into a similar system based off 3D Perlin noise. Instead of sampling the “ground height”, I treated the noise value as the “density”, where anything lower than 0 would be air, and anything higher than or equal to 0 would be ground. "
Jimmy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.