Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 19:01

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Jul 13, 2013 16:39 
Offline
DGL Member

Registriert: Mi Mär 28, 2007 17:45
Beiträge: 131
Hi,

ich muss mich mal etwas ausführlicher über das Tutorial Terrain 3 (von Delphic) auslassen, habe auch einige Fragen dazu.

Vor nicht langer Zeit hatte ich bereits mehrmals hier im Forum nachgefragt, ob jemand Erfahrungen mit diesem Quadtree-Code und seiner Alltagstauglichkeit habe. Die Reaktionen waren - vorsichtig formuliert - extrem zurückhaltend (eigentlich nicht vorhanden). Das wundert mich etwas, denn das, worum es dabei geht, ist doch von enormer Wichtigkeit für die 3D-Programmierung. Es geht um nicht weniger als die unerlässliche LOD-Optimierung beim Rendern großer Außenterrains.

Gut, die ganze Materie ist alles andere als simpel, und ich gestehe, dass ich weit davon entfernt bin, alles zu kapieren. Jedenfalls habe ich den Versuch gemacht, den Code zu knacken, d.h. zunächst mal den theoretischen Algorithmus. Das dem Tutorial zugrunde liegende Papier von Stephan Röttger ist sehr knapp gehalten und wendet sich nicht an Anfänger. Trotzdem ist es unerlässlich, das Paper zu lesen, wenn man das Tutorial auch nur annähernd verstehen will, denn Delphic bringt in seinem Text noch einmal einen reduzierten Auszug. Ich denke, für sich alleine ist das Tutorial überhaupt nicht verständlich.

Wichtige Hinweise gibt aber der Code, der (unter Delphi, nicht unter Lazarus) gut funktioniert. Ich bin einmal kräftig drüber hergegangen, habe alles Unnütze rausgeschmissen und ein wenig meinen eigenen Stil reingebracht. Vor allem habe ich die relevanten Funktionen und Variablen in einer Klasse "TTerrain" untergebracht, was die Übersichtlichkeit erhöht. Dennoch bleibt eine Reihe von offenen Fragen, die ich gerne klären würde, bevor ich versuche, den Code bis ins letzte Detail zu verstehen oder gar anzuwenden. Vielleicht liest Delphic diesen Beitrag und kann helfen.

Was mich gehörig irritierte, das waren die drei Dimensionierungen: Einmal die Quadtree-Matrix mit der obligatorischen Größe 2^n (quadratisch), dann die Heightmap-Abmessungen, beliebig, aber ebenfalls quadratisch, und schließlich die gemappte Terraingröße, mit der das Ganze beim Rendern auf gewünschte Größeneindrücke gebracht wird. Entscheidend ist nach meiner Erkenntnis (die ohne weiteres falsch sein kann, bitte berichtigen) die Quadtreegröße. Diese Matrix legt die Positionen, Lage und Größe der zu rendernden Dreiecke fest. Aus der Heightmap werden nur die Höhenwerte ausgelesen, und wenn Heightmap und Quadtree-Matrix unterschiedlich dimensioniert sind, wird entweder interpoliert oder - wie im Tutorialcode - einfach abgerundet.

Die Dominanz der Matrix lässt mich vermuten, dass das Terrain von der Anlage her quadratisch sein muss. Sicher, es lässt sich beim Rendern noch in x- oder z-Richtung spreizen, aber das wohl nur in Grenzen. Langgestreckte, schmale Terrains sind praktisch nicht möglich. Oder doch? Was habe ich dann womöglich nicht verstanden?

Wenn aber die Matrix quadratisch ist, wird am besten die Heightmap in derselben Größe angelegt, ein Pixel pro kleinste Quadrateinheit. Das erleichtert, präzisiert und beschleunigt das Auslesen der Höhenwerte. Außerdem muss in der praktischen Anwendung eine Map existieren, in der für die einzelnen Quadranten die Texturen codiert aufgelistet sind. Diese Map wiederum muss mit der Quadtree-Matrix korrespondieren und sollte gleichzeitig dieselbe Bitmapgröße wie die Heightmap haben, sonst könnte das Terrain kaum vernünftig in einem Editor oder Grafikprogramm bearbeitet werden.

Eine andere, wahrscheinlich dumme Frage betrifft das Texturieren. Was heißt das eigentlich, wenn die Darstellung, z.B. bei entfernteren oder glatteren Terrainpartien, in größeren Dreiecken erfolgt? Wird einfach die Bodentextur auf das größere Dreieck skaliert? Oder kommt Mipmapping zum Zuge? Und was ist, wenn innerhalb eines großen Dreiecks verschiedene Texturen (zugeschnitten auf die kleineren Dreiecke) vorgesehen sind?

Dann noch eine Frage, zu ich weder in dem Paper noch im Code eine Antwort gefunden habe: Was ist, wenn ein Quadrat zum Teil in kleinere Quadrate aufgelöst wird: Wird dann zuerst das größere Quadrat texturiert und werden die Texturen der kleineren Quadrate darüber gelegt, oder werden die feiner aufgelösten Bereiche von vornherein ausgespart? Im ersteren Fall kann es ja vorkommen, dass bis zu 6, 7 Texturen übereinander liegen, was wahrscheinlich aber keinen Performanceeinbruch zur Folge hat.

Ich hoffe, durch diesen Beitrag der Sache ein wenig näher zu kommen. So eine Unit mit einer LOD-gesteuerten Terrain-Klasse wäre nach meiner Meinung eine sehr schöne Sache.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jul 14, 2013 10:03 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Mapform: Ich kann nicht auf das Tut im speziellen eingehen. Bezüglich Quadtree möchte ich aber anmerken, dass Knoten des Baums auch leer sein können.
Du kannst also durchaus auch längliche Karten erstellen indem du die Ränder in eine Richtung leer lässt. Ansonsten bliebe mir noch der hoffnungslose Verweis auf Octree im Wiki... ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » DGL » Feedback


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.080s | 17 Queries | GZIP : On ]