Tôi đang tạo một trò chơi XNA đòi hỏi một không gian rộng lớn cho người chơi. Hiện tại, sơ đồ chiều cao thử nghiệm tôi đang sử dụng là 4096x4096 và được lưu dưới dạng BMP 4 bit.
Những gì tôi đang cố gắng làm là lấy tập tin heightmap khổng lồ đó và kết xuất nó trong trò chơi. Vấn đề tôi gặp phải là thực tế là không hiệu quả khi tải toàn bộ địa hình vào bộ nhớ cùng một lúc, vì nó sẽ sử dụng phần lớn bộ nhớ khả dụng.
Một vấn đề khác mà tôi gặp phải là tôi không thể hiển thị tất cả địa hình trong một nguyên thủy do có giới hạn cứng được đặt trong XNA.
Như đã nói, tôi đã tìm thấy một số giải pháp, tất cả những giải pháp tôi đã liệt kê dưới đây:
- Kết xuất dựa trên vị trí của người dùng hiện tại - về cơ bản vẽ một hình vuông xung quanh người dùng bất kể định hướng của họ trên thế giới. Đây không phải là chính xác những gì tôi muốn, bởi vì bạn vẫn hiển thị không gian mà người dùng không nhìn thấy.
- Kết xuất dựa trên hướng và vị trí của người dùng - Tôi đã tìm thấy một công thức để truy xuất một hình tam giác được cho là có các pixel của sơ đồ chiều cao được cho là được hiển thị, nhưng điều này tỏ ra rất khó khăn.
- Chia địa hình thành nhiều phần và hiển thị những phần gần nhất với người dùng - Vẫn không hiệu quả lắm vì bạn vẫn hiển thị các phần mà mọi người sẽ không nhìn thấy. Và nó đòi hỏi nhiều công sức vì sau đó tôi phải chia sơ đồ chiều cao của mình thành nhiều phần và khả năng mở rộng trở thành một vấn đề lớn.
Sau khi thử những giải pháp đó, tôi mới biết nên làm gì. Tôi đã nhận được một số câu trả lời nơi mọi người đang bảo tôi thực hiện các thuật toán phức tạp này, nhưng tôi đơn giản là không biết làm thế nào để tiếp cận việc thực hiện chúng.
Vì vậy, về cơ bản, tôi đang yêu cầu một cách đơn giản, đơn giản để hiển thị các địa hình khiêm tốn trong XNA với hiệu quả tối đa.
Tôi còn khá mới mẻ để phát triển trò chơi nói chung, nhưng tôi sẵn sàng nghiên cứu nếu nó có vẻ hứa hẹn.
Cập nhật 1: Sau khi nghiên cứu phương pháp geoclipmapping, tôi bắt đầu viết mã với điều đó. Tôi đã hoàn thành tất cả các phép toán, và trò chơi chạy. Tuy nhiên, nó cực kỳ không hiệu quả - có lẽ là mã hóa xấu về phía tôi. Nó chạy ở 2FPS và sử dụng toàn bộ lõi CPU của tôi. Tôi sẽ thử và cải thiện mã, nhưng tôi nghĩ rằng tôi sẽ cần thêm trợ giúp, vì vậy đây là một Pastebin của mã cho lớp người quản lý địa hình. Tôi sẽ đăng lại với nhiều kết quả hơn sau này nếu tôi thấy nó hiệu quả hơn.