Làm thế nào để các trò chơi như Minecraft tạo ra toàn bộ thế giới từ một số hạt giống?


32

Tôi muốn tạo ra một thế giới hoàn toàn độc đáo với quần xã sinh vật (giống như những gì Minecraft và các trò chơi tương tự làm). Tôi không hiểu làm thế nào họ tạo ra toàn bộ thế giới này từ một số "hạt giống" duy nhất. Ai đó có thể cung cấp một cái nhìn tổng quan cơ bản về kỹ thuật?


13
Notch thực sự đã viết một bài đăng trên blog về việc tạo địa hình , hiện đã hoàn toàn lỗi thời kể từ khi mã mới có quần xã và FRACTALS và các thuật sĩ khác như vậy. Chưa bao giờ có phần 2.
một con mèo

Câu trả lời:


27
  1. Làm thế nào để bạn tạo X ngẫu nhiên từ một hạt giống? một giá trị hạt giống là trạng thái ban đầu của một trình tạo số ngẫu nhiên. Trong hầu hết các ngôn ngữ lập trình, bạn có thể đặt hạt giống này. Ví dụ, C sử dụng srand(). Nếu bạn không chỉ định một hạt giống cụ thể để bắt đầu, thông thường giá trị dấu thời gian được sử dụng làm hạt giống. Bằng cách đó, mỗi lần bạn chạy, các số ngẫu nhiên là khác nhau.

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

    Như bạn có thể thấy, bất cứ khi nào bạn gieo hạt giống với một giá trị nhất định (tôi đã sử dụng 1 làm hạt giống), các số ngẫu nhiên kết quả là như nhau.

  2. Làm thế nào để bạn tạo ra một thế giới cuộc sống minecraft dựa trên số ngẫu nhiên? Notch có một bài về điều này. Ngoài ra, bạn có thể xem hướng dẫn của người khác về "thế giới giống như minecraft". Tôi rất thích cái này, ví dụ: kết xuất giống Minecraft trong OpenGL 4 . Ý tưởng cơ bản là sử dụng tiếng ồn Perlin (hoặc tiếng ồn đơn giản). Đây là một câu hỏi hay về các chức năng tiếng ồn: Hiểu về tiếng ồn Perlin


1
Trên thực tế, bạn sẽ không thể sử dụng Perlin Noise Tôi sợ minecraft có các vách đá, hang động treo quá nhiều, và PN không thể vào đó.
jcora

6
Tiếng ồn Perlin chỉ là một hệ thống tiếng ồn mà bạn có thể sử dụng như một phần của phương pháp tạo địa hình lớn hơn. ví dụ. Bạn có thể sử dụng nhiễu perlin 3D với giá trị ngưỡng phụ thuộc độ cao để tạo ra các vách đá, hang động, v.v. (Chỉnh sửa - trên thực tế, tôi thấy từ liên kết trong câu trả lời chính xác là những gì Notch đã làm tại một điểm.)
Kylotan

1
+1 Kylotan. Đây là trích dẫn từ blog của Notch: "Cụ thể, không có cách nào để [2D perlin heightmap] tạo ra bất kỳ phần nhô ra nào. Vì vậy, tôi đã chuyển hệ thống sang một hệ thống tương tự dựa trên tiếng ồn 3D Perlin. đã xử lý giá trị nhiễu như mật độ mật mã, trong đó mọi thứ thấp hơn 0 sẽ là không khí và bất cứ thứ gì cao hơn hoặc bằng 0 sẽ là mặt đất. "
Jimmy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.