LOD (poziom szczegółowości) oznacza zarządzanie obiektami w różnych skalach wyświetlania, które mogą być podzielone na dwie części. Możesz jednak użyć jednego z nich i to wystarczy w większości przypadków.
Pokaż / ukryj warstwy (grupa obiektów tego samego typu) w zależności od wielkości (skala wyświetlania).
Metoda oparta na geometrii algebraicznej, zwana Generalizacją (która jest algorytmem upraszczającym wielokąty). spójrz na poniższy obrazek
Najsłynniejsza i najskuteczniejsza metoda uogólnienia (uproszczenia) siatki wielokątów jest znana jako twierdzenie wielościanu Descartesa-Eulera (równanie 4.5 przepraszam, jeśli mam na myśli książkę, najlepiej, co potrafię) i jest używane przez większość przestrzennych baz danych na przykład moduły PostGIS w PostgreSQL. Po prostu usuwa mniejsze boki wielokąta i tworzy bardzo zaokrąglony. (Powyżej zdjęcia)
Aby zaimplementować LOD w grze, musisz zapisać skalę swojej mapy (sceny) i zarządzać nią podczas operacji powiększania / pomniejszania. Skala zmienia się od zera do nieskończoności i musisz podzielić to na określoną liczbę zakresów, na przykład coś takiego:
- 1 / zero = nieskończoność do 1/50
- 1/50 do 1/100
- 1/100 do 1/1000
- 1/1000 do 1 / nieskończoność = 0
Następnie musisz określić, które typy obiektów (warstw) powinny być widoczne lub niewidoczne w każdym z powyższych zakresów. Na przykład mały typ obiektu, taki jak zawór hydrantowy, nie powinien być widoczny, gdy użytkownik znajduje się w czwartym zakresie, ponieważ będzie bardzo mały w tej skali i nie może być dyskryminowany, więc nie ma znaczenia, jeśli pominiesz rysowanie go na ekran.
Kiedy więc użytkownik używa powiększania i pomniejszania w celu zmiany powiększenia, przesuwa się on powyżej powyższych granic z jednego do drugiego zakresu, a gra wykorzystuje te skale wyświetlania do zarządzania poziomem szczegółów poprzez pokazywanie lub ukrywanie obiektów na scenie. To dyskretne rozwiązanie, które nagle blaknie podczas operacji zmniejszania, jednak mając dokładnie zdefiniowane skale wyświetlania i zakresy powiększeń, użytkownik nic nie poczuje.
Powyższa grupa 4 zakresów jest tylko przykładem i musisz znaleźć najlepszą dla swojej sprawy metodą prób i błędów. Nie ma na to żadnej reguły.
Czasami gry używają własnych metod LOD, Subway Surfer na chwilę, pokazuje mały prostokąt bez tekstury, aby pokazać budynek z daleka, a gdy zbliża się nagle, robi się tekstury, gracz odczuwa to. Nie mówiłeś o swoim systemie projekcji, co jest bardzo ważne, nie mówiłeś też o tym, jaką grę tworzysz.
Załóżmy jednak, że wdrażasz pełną grę 3D z OpenGl i chcesz przefiltrować trochę siatki przed przeniesieniem ich do sprzętu graficznego, jestem pewien, że pomoże to zmniejszyć operacje wiązania / rozpinania obiektów buforowych i tablic wierzchołków (VBO, VAO) podczas radzenie sobie z OpenGl.
Używając tylko zarządzania warstwami lub po prostu zaimplementuj Uogólnienie Eulera
W większości przypadków nie jest konieczne wdrażanie algorytmu uogólnienia, a filtrowanie obiektów po prostu działa i pozwala uzyskać wymaganą wydajność (częstotliwość odświeżania), jednak jest to całkowicie zależne od przypadku. Chociaż jest to prosty algorytm, który po prostu usuwa małe boki wielokąta, musisz zdefiniować próg, który jest iloczynem wielkości i stałej liczby, aby większe boki były filtrowane z dużo większego punktu widzenia.
Zapominanie o zarządzaniu warstwami i wdrażanie tylko algorytmu generalizacji Eulers zapewnia bardzo schludną i ciągłą metodę, w której wystarczy sprawdzić każdą stronę i linię w stosunku do wcześniej określonego progu i pokazać je tylko w przypadku, gdy są wystarczająco duże, aby można je było rozróżnić na ekranie.
PS: powiększenie to liczba zmiennoprzecinkowa> 0, która jest równa 1 / skala, a skala jest zwykle <1, ponieważ skala 1: 1 oznacza, że masz rzeczywiste długości świata w grze.