Kết xuất sông trong lưới


8

Tôi đã tạo một bản đồ chiều cao ngẫu nhiên và bây giờ tôi muốn tạo ra các dòng sông. Tôi đã tạo ra một thuật toán dựa trên một * để làm cho các dòng sông chảy từ các đỉnh núi ra biển và bây giờ tôi đang trong quá trình tìm ra một thuật toán tao nhã để kết xuất chúng.

Đó là 2D, vuông, mapgrid. Các ô mà dòng sông có giá trị nguyên đơn giản với dạng này: rivernumber && pointOrder. Tức là: 10, 11, 12, 13, 14, 15, 16 ... 1 + N cho dòng sông đầu tiên, 20,21,22,23 ... 2 + N cho lần thứ hai, v.v. Điều này được tạo ra trong thời gian tạo lưới bản đồ và nó được thực hiện chỉ một lần, khi thế giới được tạo.

Tôi muốn coi mỗi dòng sông là một vectơ, nhưng có một vấn đề, nếu cùng một dòng sông có các nhánh (vì tôi tạo ra một số tiếng ồn để tạo ra các nhánh), tôi không thể chỉ kết nối các điểm theo thứ tự.

Cách thay thế thứ hai là tạo ra một thuật toán phức tạp, trong đó phân tích từng điểm, kiểm tra xem điểm tiếp theo không phải là một nhánh, nếu vậy kích hoạt một thuật toán khác chăm sóc nhánh sau đó quay trở lại sông chính, v.v. Rất phức tạp và không phù hợp.

Có lẽ có một giải pháp trong thuật toán thế hệ hoặc thuật toán kết xuất dòng sông thường được sử dụng trong những trường hợp này và tôi không biết.

Bất cứ lời khuyên? Cảm ơn!!


Tôi đoán bạn có thể sử dụng một số thuật toán được sử dụng để tạo mê cung và chỉ cần cắt một số ví dụ để tạo ra một bản đồ sông thực tế hơn.
Ali1S232

1
Tôi có đường dẫn sông, nhưng không biết cách xử lý các nhánh khi kết xuất chúng, kết nối các điểm.
Gabriel A. Zorrilla

Có một điểm tại hợp lưu (điểm gặp gỡ của hai con sông) được coi là một loại nút đặc biệt?
Vịt Cộng sản

1
Tôi đã từng thấy một bài viết về việc tạo ra cách kết xuất đường trên một bản đồ. Nó đã chọn gạch dựa trên đó gạch hàng xóm cũng có tài sản đường trên. nó tạo ra một cái gì đó xung quanh 16 gạch khác nhau (bao gồm tất cả các phép quay). Bước này chỉ được thực hiện trong quá trình tạo cảnh. không biết bạn có thể làm điều tương tự hay không.
Ali1S 232

4
Bạn có thể cho chúng tôi một ảnh chụp màn hình với một số bản phác thảo để hiển thị tốt hơn những gì bạn đang cố gắng làm không?
Tấn

Câu trả lời:


1

Đây hướng dẫn / trò chơi dev viết blog cung cấp một phương pháp tuyệt vời để tạo ra các dòng sông, và họ làm rất độc đáo. Tôi không chắc liệu điều này có thể được áp dụng hiệu quả trong tình huống của bạn hay không, vì bạn đã thực hiện một cách tiếp cận khác (và có bản đồ dựa trên lưới) nhưng chắc chắn nó đáng để xem xét.


Nó thật là tuyệt.
Tim Holt

1
Thêm chi tiết có thể hữu ích: Các dòng sông trong dự án đó chảy từ núi ra đại dương. Âm lượng tăng khi nó chảy xuống và các dòng sông kết hợp với nhau thêm khối lượng của chúng. Độ rộng đường trên bản đồ là sqrt của âm lượng. Mọi vị trí trong các điểm sông đều xuống dốc; một ngã ba trên sông có nghĩa là hai hoặc nhiều địa điểm chỉ đến cùng một điểm xuống dốc. Tôi nghĩ rằng điều này có thể được sử dụng trên lưới là tốt.
amitp

0

Một điều bạn có thể làm là để mỗi nút riêng lẻ tự xử lý. Thực hiện vượt qua nó khi sau thế hệ nhưng trước khi hiển thị và cung cấp cho mỗi ô vuông một danh sách các lối vào (số thấp hơn, cùng một dòng sông) và lối ra (số cao hơn, cùng một dòng sông).

Từ dữ liệu này, bạn sẽ có thể tìm ra nơi (các) lối vào và lối ra (lưu trữ vị trí tương đối có thể sẽ giúp ích) và bạn có thể từ đó kết xuất dòng sông vuông đó dựa trên các kết nối. Cách đơn giản nhất để thực hiện một nhánh là kết nối các lối vào / lối ra vào trung tâm của hình vuông.

Việc trình bày đồ họa này có thể được thực hiện theo nhiều cách khác nhau và bạn chưa cung cấp đủ thông tin về việc sử dụng nó để tôi đề xuất trực tiếp; vì vậy thay vào đó tôi sẽ chỉ đề cập đến một cách liên quan đến một hệ thống hạt, trong đó mỗi đoạn nước chảy tự động "xuống dốc".

Có hình vuông gốc bắt đầu một số "miếng nước" ở mỗi lối vào của nó và để chúng quyết định ngẫu nhiên từ các lối thoát có sẵn khi tạo. Khi nó chạm vào lối ra, sinh ra một con ở lát gạch, nó chạm vào lối vào và đưa mảnh nước trở lại hình vuông. Vì nó đã sinh ra ở ô vuông tiếp theo (chỉ thực hiện điều này một lần trên mỗi ô vuông) và bạn đã biết các cài đặt và phép tính (không ngẫu nhiên hóa lại), bạn có thể để phần này lặp lại trong ô vuông với rất ít tính toán, và nếu bạn muốn, có khả năng sử dụng một shader.

Điều này có lợi thế là cũng cho phép các con sông của bạn đi đến những con sông nhỏ hơn sau các nhánh và hai con sông kết quả không phải có cùng kích thước. Sẽ mất một chút thời gian để dòng sông cư trú hoàn toàn từ đỉnh xuống đáy, nhưng hiệu quả mang lại sẽ khá dễ chịu vì bạn có thể kết thúc với một thứ như thế này đơn giản dựa trên các nút có sông.

10--10--6--6--2--2
    |      |     
    4--4   4
       |   |
       4---6--6--6
       |  
       2

Tùy thuộc vào hạt giống và mã, nó cũng có khả năng trông khác nhau mỗi khi bạn chạy nó, ngay cả khi vị trí nút giống nhau.

Hy vọng ví dụ này là một nơi nào đó dọc theo dòng bạn đang tìm kiếm.

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.