LOD (Cấp độ chi tiết) có nghĩa là quản lý các đối tượng ở các tỷ lệ hiển thị khác nhau, có thể bị lệch hai phần. Tuy nhiên, bạn có thể sử dụng một trong số chúng và điều đó là đủ cho hầu hết các trường hợp.
Hiển thị / ẩn các lớp (nhóm các đối tượng cùng loại) tùy thuộc vào độ lớn (tỷ lệ hiển thị).
Phương pháp dựa trên đại số Geomery, được gọi là Generalization (là một thuật toán để đơn giản hóa các đa giác). nhìn vào bức tranh sau
Phương pháp nổi tiếng và hiệu quả nhất để khái quát hóa (đơn giản hóa) một lưới đa giác được gọi là định lý đa diện Descartes-Euler (Công thức 4.5 xin lỗi nếu tôi tham khảo một cuốn sách, đó là cách tốt nhất tôi có thể làm) và được sử dụng bởi hầu hết các cơ sở dữ liệu không gian ví dụ các mô-đun PostGIS trong PostgreSQL. Nó chỉ đơn giản là loại bỏ các cạnh nhỏ hơn của một đa giác và làm cho một hình rất tròn. (Hình trên)
Để triển khai LOD trong trò chơi, bạn cần lưu và quản lý tỷ lệ bản đồ (cảnh) của mình trong các hoạt động phóng to / thu nhỏ. Thang đo thay đổi từ 0 đến vô cùng và bạn phải chia số này thành một số phạm vi cụ thể, ví dụ như thế này:
- 1 / không = vô cùng đến 1/50
- 1/50 đến 1/100
- 1/100 đến 1/1000
- 1/1000 đến 1 / vô cùng = 0
Sau đó, bạn cần xác định loại đối tượng (lớp) nào sẽ hiển thị hoặc không nhìn thấy trong mỗi phạm vi trên. Ví dụ, không thể nhìn thấy một loại vật thể nhỏ như van vòi khi người dùng ở phạm vi thứ tư vì nó sẽ rất nhỏ ở quy mô đó và không thể bị phân biệt đối xử nên không thành vấn đề nếu bạn bỏ qua việc vẽ nó trên màn.
Vì vậy, khi người dùng sử dụng phóng to và thu nhỏ để thay đổi độ phóng đại, anh ta sẽ di chuyển qua các giới hạn trên từ phạm vi này sang phạm vi khác và trò chơi của bạn sử dụng các tỷ lệ hiển thị này để quản lý mức độ chi tiết bằng cách hiển thị hoặc ẩn đối tượng trên cảnh. Điều này làm cho một giải pháp riêng biệt mà các đối tượng đột nhiên mờ dần trong quá trình thu nhỏ của bạn, tuy nhiên có tỷ lệ hiển thị và phạm vi phóng đại được xác định cẩn thận, người dùng sẽ không cảm thấy gì.
Nhóm 4 phạm vi trên chỉ là một ví dụ và bạn cần tìm ra trường hợp tốt nhất cho trường hợp của mình bằng cách dùng thử và lỗi. Không có quy tắc cho điều đó.
Đôi khi các trò chơi sử dụng các phương thức LOD của riêng họ, Subway Surfer ngay lập tức, hiển thị một hình chữ nhật nhỏ, không có kết cấu để hiển thị một tòa nhà ở xa, và bằng cách đến gần, đột nhiên nó có kết cấu, game thủ cảm thấy nó. Bạn đã không nói về hệ thống trình chiếu của mình, điều rất quan trọng cũng không nói về loại trò chơi bạn đang tạo.
Tuy nhiên, giả sử bạn đang triển khai một trò chơi 3D đầy đủ với openGl và bạn muốn lọc một số lưới trước khi chuyển chúng sang phần cứng đồ họa, tôi chắc chắn điều này sẽ giúp bạn giảm các hoạt động liên kết / hủy liên kết với các đối tượng đệm và mảng đỉnh (VBO, VAO) trong khi giao dịch với OpenGl.
Chỉ sử dụng quản lý lớp hoặc chỉ thực hiện Tổng quát hóa Euler's
Trong hầu hết các trường hợp, không cần thiết phải thực hiện thuật toán tổng quát hóa và các đối tượng lọc chỉ hoạt động và đưa bạn đến hiệu quả (tốc độ làm mới) mà bạn cần, tuy nhiên hoàn toàn phụ thuộc vào từng trường hợp. Mặc dù đây là một thuật toán dễ dàng chỉ loại bỏ các cạnh nhỏ của đa giác, bạn cần xác định ngưỡng là sản phẩm của cường độ và số không đổi, vì vậy các mặt lớn hơn sẽ được lọc theo quan điểm xa hơn nhiều.
Quên cách xử lý lớp và chỉ thực hiện thuật toán tổng quát hóa Eulers, cung cấp một phương pháp rất gọn gàng và liên tục, trong đó bạn chỉ cần kiểm tra từng cạnh và đường thẳng theo ngưỡng được xác định trước và chỉ hiển thị chúng trong trường hợp chúng đủ lớn để bị phân biệt trên màn hình.
PS: độ phóng đại là số float> 0 bằng 1 / tỷ lệ và tỷ lệ thường <1 vì tỷ lệ 1: 1 có nghĩa là bạn có độ dài thế giới thực trong trò chơi của mình.