เกมอย่าง Minecraft สร้างโลกทั้งโลกจากหมายเลขเมล็ดได้อย่างไร?


32

ฉันต้องการสร้างโลกที่มีเอกลักษณ์ด้วย biomes (เช่นเกม Minecraft และเกมที่คล้ายคลึงกัน) ฉันไม่เข้าใจว่าพวกเขาสร้างโลกทั้งโลกได้อย่างไรจากหมายเลข "เมล็ดพันธุ์" เพียงหมายเลขเดียว ใครสามารถให้ภาพรวมพื้นฐานของเทคนิคได้หรือไม่


13
Notch เขียนโพสต์บล็อกเกี่ยวกับการสร้างภูมิประเทศซึ่งตอนนี้ล้าสมัยอย่างสมบูรณ์เนื่องจากโค้ดใหม่มี biomes และ FRACTALS และเวทย์มนตร์อื่น ๆ ไม่เคยมีส่วนที่ 2 เช่นกัน
แมว

คำตอบ:


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. คุณจะสร้างโลก minecraft-life โดยใช้ตัวเลขสุ่มได้อย่างไร? Notch มีโพสต์เกี่ยวกับเรื่องนี้ นอกจากนี้คุณสามารถดูบทแนะนำของคนอื่น ๆ ใน "โลกเสมือน minecraft" ผมมีความสุขอันนี้ตัวอย่างเช่น: Minecraft เหมือนการแสดงผลใน OpenGL 4 แนวคิดพื้นฐานคือการใช้เสียง Perlin (หรือเสียงรบกวนง่าย ๆ ) นี่เป็นคำถามที่ดีเกี่ยวกับฟังก์ชั่นเสียงรบกวน: การทำความเข้าใจกับเสียงเพอร์ลิน


1
จริงๆแล้วคุณจะไม่สามารถใช้ Perlin Noise ฉันกลัวว่า Minecraft จะมีหน้าผาถ้ำและอื่น ๆ ที่แขวนอยู่และ PN ไม่สามารถเข้าไปได้
jcora

6
เสียงเพอร์ลินเป็นเพียงระบบเสียงที่คุณสามารถใช้เป็นส่วนหนึ่งของวิธีการสร้างภูมิประเทศที่ใหญ่กว่า เช่น. คุณสามารถใช้เสียงเพอร์ลิน 3 มิติพร้อมค่าขีดจำกัดความสูงขึ้นอยู่กับการสร้างหน้าผาถ้ำ ฯลฯ (แก้ไข - อันที่จริงฉันเห็นจากลิงก์ในคำตอบซึ่งเป็นสิ่งที่ Notch ทำในจุดเดียว)
Kylotan

1
+1 Kylotan นี่คือข้อความจากบล็อกของ Notch: "โดยเฉพาะไม่มีทางที่ [2D Perlin heightmap] สร้างส่วนยื่นใด ๆ เลยดังนั้นฉันจึงเปลี่ยนระบบให้เป็นระบบที่คล้ายกันโดยใช้เสียง Perlin 3D แทนการสุ่มตัวอย่าง" ความสูงจากพื้นดิน "ฉัน ถือว่าค่าเสียงเป็น "ความหนาแน่น" โดยที่สิ่งใดก็ตามที่ต่ำกว่า 0 จะเป็นอากาศและสิ่งใดที่สูงกว่าหรือเท่ากับ 0 จะเป็นพื้น "
Jimmy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.