source: experimental/TerrainTest/imageconversion.txt @ 173

Last change on this file since 173 was 173, checked in by Torben Dannhauer, 13 years ago
File size: 3.3 KB
Line 
1Theoretischer approach zu Terrain Modifikation.
2
3
4Grundsätzliche Optionen zum Modifizieren von Geländekacheln:
5a) Implementieren einer eigenen TerrainTechnique und Modifikation zur Laufzeit  -> Flexibel aber evtl langsam
6b) Dauerhaftes Patchen der Orginaldatenbank                                     -> Keine Verzögerung, Patching nicht reversibel, unflexibel
7c) Erzeugen von sub-datenbanken mit gepatchen bereichen, Verzweigen auf die
8        alternative Sub-datenbank zur Laufzeit
9        (im loadingcallback lediglich ein lookup Table)                         -> Implementierung aufwändig, rel. schnell, Prefetching notwendig zum Erstellen der gepatchten Subdatenbanken
10d) Pseudoloaders welcher die Datenbank modifikationen beim Laden macht,
11        so dass der gesamte Compilevorgang noch im Pagerthread stattfindet.     -> Implementierung aufwändig, flexibel, langsam aber keine Framedrops
12
13
14Vorgehen a): Bei Nutzung einer eigenen GeometryTechnique:
15a) TilesLoadedCallback: Muss bei VPB Datenbanken < 2.9.10 verwendet werden, da hier die DB die geometryTechnique enthält und daher terrain->terrainTechniquePrototype ignoriert.
16b) CustonGeometryTechniquePrototype: Kann bei VPB Datenbanken >= 2.9.10 verwendet werden, da hier in die DB keine geometryTechnique enthältund daher terrain->terrainTechniquePrototype verwendet.
17
18Vorgehen b): Bei dauerhaften Patchen:
19a) VPb's --patch Funktion nutzen. Die Paches müssen eine höhere Auflösung als das Orginal haben. ESRI .arc Files erzeugen mittels Algorithmus und dann patchen.
20
21Vorgehen c): Bei Subdatenbanken: TBD
22Vorgehen d): Bei Pseudo-Loader: TBD
23
24
25
26
27Grundsätzliche Optionen für Heightfieldmodifikationen:
28a) vor dem init() Call das Heightfield modifizieren
29b) init() überladen und in init die modifikationen durchführen, bevor generateGeometry() aufgerufen wird.
30
31Vorgehen für das Ermitteln der korrekten Heightwerte:
321. checken ob Tile betroffen ( xmin < x < xmax && ymin < y < ymax ) oder ( latmin < lat < latmax && lonmin < lon < lonmax )
332. Wenn Betroffen, je vertex reihe/spalte checken ob sie im bereich liegt
343. Wenn im Bereich: modifizieren der Werte
35        I) Bei Verwendung eines Patch-Bildes: Auslesen des images je spalte, interpolieren der Werte auf Tile-Bereich und Vertexanzahl und addieren/ersetzen der ursprünglichen Werte.
36        II) Bei Verwendung einer Mathematischen funktion: Berechnen des Additions-/Zielwertes je vertex und addieren/ersetzen des ursprünglichen Wertes.
37                - Eingabewert in Algorithmus: Lat/Lon der 4 Tile-Ecken. Algorithmus kann für lat lon der Vertices in der Tile linear interpolieren.
38
39
40Grundsätzliche Optionen für Löcher:
41a) generateGeometry umbauen, so dass es keine Oberfläche und keinen Skirt an spezifizierten Stellen bildet.
42        -> Definition eines shapes notwendig, da beim Ausschneiten ein simples Rechteck wie bei Heightmodifikation nciht ausreicht. Per Vertex: Inside polygon nötig.
43        --> Aufwändig
44b) einene weiteren "map" layer einbauen der pro Vertex entscheidet ob der Vertex gerendert wird oder nicht.
45        -> Todo: switchlayer ansehen, evtl ist dass ja schon sowas
46c) Alpha in der Textur aktivieren für stellen die Löcher haben sollen und blenden lassen.
47        -> Todo: wird zFightfing vermieden wenn einer der partner transparent ist? vermutlich nicht.)
48d) Shader nutzen, um im Fragmentshader die transparenten Elemente des Terrains zu verwerfen mittels discard keyword.
49        -> todo: Wie kann man Terrain zu allen anderen Elementen unterscheiden?
Note: See TracBrowser for help on using the repository browser.