LOD (Level of Detail) bedeutet das Verwalten von Objekten in unterschiedlichen Darstellungsmaßstäben, die in zwei Teile unterteilt sein können. Sie können jedoch eine davon verwenden, und das würde für die meisten Fälle ausreichen.
Ein- / Ausblenden von Ebenen (Gruppe von Objekten desselben Typs) abhängig von der Größe (Anzeigeskala).
Algebraische Geomery-basierte Methode, Generalization genannt (ein Algorithmus zur Vereinfachung von Polygonen). schau dir das folgende bild an
Die bekannteste und effizienteste Methode zum Verallgemeinern (Vereinfachen) eines Polygonnetzes ist das Descartes-Euler-Polyedersatz (Gleichung 4.5), die von den meisten räumlichen Datenbanken verwendet wird Zum Beispiel PostGIS-Module in PostgreSQL. Es werden einfach kleinere Seiten eines Polygons entfernt und es wird eine sehr abgerundete Seite erstellt. (Bild oben)
Um LOD in einem Spiel zu implementieren, müssen Sie den Maßstab Ihrer Karte (Szene) beim Vergrößern / Verkleinern speichern und verwalten. Die Skala ändert sich von Null nach Unendlich und Sie müssen dies in eine bestimmte Anzahl von Bereichen aufteilen, zum Beispiel in etwa wie folgt:
- 1 / null = unendlich bis 1/50
- 1/50 bis 1/100
- 1/100 bis 1/1000
- 1/1000 bis 1 / unendlich = 0
Dann müssen Sie definieren, welche Arten Ihrer Objekte (Ebenen) in jedem der oben genannten Bereiche sichtbar oder unsichtbar sein sollen. Zum Beispiel sollte ein kleiner Objekttyp wie ein Hydrantenventil nicht sichtbar sein, wenn sich der Benutzer im vierten Bereich befindet, da er bei dieser Skala sehr klein ist und nicht unterschieden werden kann, sodass es egal ist, ob Sie ihn auf der Zeichnung überspringen Bildschirm.
Wenn ein Benutzer die Vergrößerung durch Vergrößern und Verkleinern ändert, wechselt er durch die oben genannten Grenzen von einem zum anderen Bereich. In Ihrem Spiel werden diese Anzeigeskalen zum Verwalten der Detailebene verwendet, indem Objekte in der Szene angezeigt oder ausgeblendet werden. Dies ist eine diskrete Lösung, bei der Objekte während des Verkleinerns plötzlich verblassen. Wenn jedoch die Anzeigeskalen und Vergrößerungsbereiche sorgfältig definiert sind, spürt der Benutzer nichts.
Die obige Gruppe von 4 Bereichen ist nur ein Beispiel und Sie müssen durch Ausprobieren das Beste für Ihren eigenen Fall finden. Dafür gibt es keine Regel.
Manchmal verwenden die Spiele ihre eigenen LOD-Methoden, Subway Surfer for Instant, und zeigen ein kleines Rechteck ohne Textur, um ein Gebäude in der Ferne zu zeigen. Sie haben nicht über Ihr Projektionssystem gesprochen, was sehr wichtig ist. Sie haben auch nicht darüber gesprochen, welche Art von Spiel Sie erstellen.
Angenommen, Sie implementieren ein vollständiges 3D-Spiel mit openGl und möchten einige Mesh-Dateien filtern, bevor Sie sie auf Grafikhardware übertragen. Ich bin sicher, dies wird Ihnen dabei helfen, die Bindungs- / Entbindungsoperationen mit Pufferobjekten und Vertex-Arrays (VBO, VAO) zu reduzieren Umgang mit OpenGl.
Verwenden Sie nur eine Ebenenverwaltung oder implementieren Sie einfach die Euler-Generalisierung
In den meisten Fällen ist es nicht erforderlich, einen Generalisierungsalgorithmus zu implementieren, und das Filtern von Objekten funktioniert einfach und bringt Sie zu der Effizienz (Aktualisierungsrate), die Sie benötigen, es hängt jedoch von Fall zu Fall völlig davon ab. Obwohl es ein einfacher Algorithmus ist, bei dem nur die kleinen Seiten eines Polygons entfernt werden, müssen Sie einen Schwellenwert definieren, der das Produkt der Größe und einer konstanten Zahl ist, damit größere Seiten unter einem viel weiter entfernten Gesichtspunkt gefiltert werden.
Wenn Sie die Ebenenverwaltung vergessen und nur den Euler-Generalisierungsalgorithmus implementieren, erhalten Sie eine sehr übersichtliche und kontinuierliche Methode, bei der Sie die einzelnen Seiten und Linien nur anhand eines vordefinierten Schwellenwerts überprüfen und sie nur dann anzeigen, wenn sie groß genug sind, um auf dem Bildschirm unterschieden zu werden.
PS: Die Vergrößerung ist eine Gleitkommazahl> 0, die 1 / Skala entspricht, und die Skala ist normalerweise <1, da eine 1: 1-Skala bedeutet, dass Sie reale Längen in Ihrem Spiel haben.