Làm cách nào tôi có thể xác định các vùng tính năng trong một thế giới được tạo theo thủ tục?


26

Tôi đang xây dựng một hòn đảo. Tôi sử dụng giải pháp chiều cao cổ điển: với chức năng xây dựng đồi, tránh các góc của bản đồ, tôi tạo độ cao. Sau đó, tiếng ồn perlin cho tôi một số biến khí hậu để xử lý các quần xã. Bây giờ, tôi đang đối mặt với hai thách thức, theo một cách nào đó, được kết nối:

  • Trong Pháo đài lùn, một trong những khía cạnh gọn gàng của thế hệ thế giới là cách trò chơi dường như "biết" các khu vực và đặt tên cho chúng, mặc dù chúng không phải là hình chữ nhật. Tôi muốn có thể "nhận ra" các khu rừng, dòng sông, ngọn đồi của mình ... bất kỳ ý tưởng nào tôi có thể sử dụng loại thuật toán nào để quét bản đồ của mình và giải thích các khu vực của nó? Và làm thế nào bạn sẽ lưu trữ điều đó? Tôi đang sử dụng một biểu đồ C ++ cơ bản được tạo từ một vectơ của "đối tượng gạch".

  • Đảo này nên được phân chia trong các khu vực chính trị, không chỉ các khu vực hoàn toàn tự nhiên. Tôi có thể sử dụng núi và sông để tạo ra "biên giới tự nhiên", nhưng bản đồ được tạo theo thủ tục của tôi không đảm bảo tôi sẽ có những "vùng đất" đẹp sẽ tạo thành một vương quốc; Tôi có thể thấy mình có một khu vực chính trị "hình thành dải băng" khổng lồ được bao bọc bởi các vương quốc siêu nhỏ. Một khả năng khác là tìm kiếm các khu vực thích hợp cho một thành phố hoặc một lâu đài. Sau đó, "phát triển" một khu vực chính trị xung quanh nó. Nhưng một lần nữa, tôi muốn có một số thuật toán nổi tiếng trước khi cố gắng tự mình nghĩ ra.

Câu hỏi này có thể được hiểu là hơi mơ hồ, vì vậy một cách để nói lại nó sẽ là: làm thế nào để phân vùng (mà không sửa đổi!) Một thế giới được tạo theo thủ tục vào các khu vực phù hợp với trò chơi? Cảm ơn trước sự giúp đỡ của bạn.


Cảm ơn bạn đã sửa lỗi và xin lỗi vì chất lượng tiếng Anh của tôi kém :)
Raveline

Tiếng Anh của bạn rất tuyệt, chỉ là "tiêu đề" tốt nhất là được đặt thành một câu hỏi trên các trang web StackExchange.
dlras2

Câu trả lời:


21

Amitp đề nghị sử dụng lưu vực sông để xác định các khu vực khác nhau, như được giải thích trong bài đăng của mình về việc tạo bản đồ đa giác . Các lưu vực sông được nhìn thấy rõ nhất bằng cách tạo bản đồ bằng bản demo của mình . Ưu điểm của việc sử dụng các lưu vực sông để giúp phân chia các lục địa là nó cung cấp các ranh giới vuông góc với đường bờ, trong khi các ngọn núi thường cung cấp các ranh giới song song.

Nếu tôi đang phân chia các khu vực địa lý, tôi sẽ sử dụng kết hợp các ngọn núi, lưu vực sông và phát hiện cạnh trên các quần xã sinh vật khác nhau trên bản đồ của mình.

Tôi cũng sẽ chỉ ra rằng các khu vực chính trị thường trải rộng trên nhiều khu vực địa lý. Tôi sẽ tạo các vùng địa lý trước, sau đó gán cho mỗi vùng một mức độ mong muốn (đó có phải là bờ biển không? Có phải đất vàng? Đất nông nghiệp tốt không?) Và chi phí đi lại (địa hình dốc? Gỗ nặng?.) Sau đó sử dụng thuật toán đường dẫn yêu thích của bạn , tạo ra sơ đồ nhiệt của du lịch giữa các khu vực mong muốn. Đây sẽ là những con đường của bạn, và bạn có thể xây dựng ranh giới chính trị của mình từ đó. Các ranh giới này thường sẽ có nhiều đường bên trong chúng và ít đường hơn giữa chúng.


1
Cảm ơn sự giúp đỡ của bạn. Tôi đã biết giải pháp của Amit, và mặc dù tôi thấy nó khá tao nhã, tôi không biết đủ về toán học đằng sau (tôi sẽ phải nghiên cứu chúng, điều mà tôi sẽ sớm làm, nhưng không phải bây giờ!). Suy nghĩ về lưu vực chắc chắn có thể giúp tôi và điều chỉnh thuật toán tạo sông không quá khó. Tôi yêu giải pháp của bạn để xây dựng đường và ranh giới chính trị, tôi phải xem xét chính xác tôi sẽ thực hiện nó như thế nào, nhưng ý tưởng này thật tuyệt!
Raveline

@Raveline - Nếu bạn sử dụng thế hệ ranh giới chính trị, hãy bình luận ở đây và cho tôi biết! Tôi muốn xem làm thế nào nó bật ra.
dlras2

13

Để thêm vào câu trả lời của Dan Rasmussen :

Một trong những lý do chính khiến tôi chuyển từ Perlin Noise ( dự án này ) sang sử dụng đa giác ( dự án này ) là vì đa giác cung cấp một số cấu trúc đẹp để gán các khu vực lớn hơn (khu vực chính trị, rừng, sa mạc, khu vực được đặt tên, ranh giới, v.v.). Bắt đầu với cấu trúc và sau đó tạo bản đồ tương tự như kết xuất đa giác - một thứ tương đối dễ dàng. Bắt đầu với bản đồ và sau đó suy ra cấu trúc tương tự như thị giác máy tính - một thứ tương đối khó, nhưng có thể. Tôi muốn cả cấu trúc và bản đồ vì vậy tôi quyết định đi theo con đường tương đối dễ dàng để xây dựng bản đồ trên đỉnh của cấu trúc (các nút và các cạnh).

Thậm chí sau đó, tôi thấy rằng tôi muốn các cấu trúc lớn hơn những gì tôi đã tạo ra. Đầu nguồn là một trong những nỗ lực để xây dựng các cấu trúc lớn hơn đó nhưng tôi cần thử nhiều cách tiếp cận hơn để nhóm các đa giác lại với nhau. Tôi chưa tìm thấy thứ gì tôi hài lòng.

Tôi không chắc Pháo đài Lùn làm thế nào. Cho rằng những kẻ đó xuất sắc đến mức nào, tôi sẽ không ngạc nhiên nếu họ có một loại thuật toán tầm nhìn tinh vi trên máy tính tinh vi.


Tôi hiểu lý do, mặc dù tôi không chắc rằng con đường của bạn dễ đến thế ... Vì dự án của tôi khá khiêm tốn, tôi sẽ cố gắng vá một cái gì đó không quá phức tạp, nhưng không có đa giác, vì điều đó có nghĩa là nghiên cứu nhiều thuật toán hơn bao hàm. (PS: trang web của bạn là một nguồn cảm hứng tuyệt vời và tôi thích nó!)
Raveline

3
bài viết thế hệ đa giác là tuyệt vời.
Raine

3

Đối với câu hỏi đầu tiên của bạn, dự đoán tốt nhất của tôi sẽ là sử dụng thuật toán phát hiện cạnh để tìm giới hạn của các vùng tự nhiên của bạn (rừng, đồi, ...). Rất nhiều thuật toán tồn tại cho loại vấn đề này.

Đối với câu hỏi thứ hai, bạn có thể sử dụng ý tưởng của riêng mình để sinh ra một lâu đài (thường là trên đỉnh đồi để phòng thủ tốt và gần nước ngọt), sau đó sử dụng thuật toán voronoi để có các vùng xung quanh mỗi lâu đài. Bạn có thể sử dụng tiếng ồn hoặc giới hạn quần xã của bạn để làm cho ranh giới thực tế hơn.

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.