1 | Theoretischer approach zu Terrain Modifikation. |
---|
2 | |
---|
3 | |
---|
4 | Grundsätzliche Optionen zum Modifizieren von Geländekacheln: |
---|
5 | a) Implementieren einer eigenen TerrainTechnique und Modifikation zur Laufzeit -> Flexibel aber evtl langsam |
---|
6 | b) Dauerhaftes Patchen der Orginaldatenbank -> Keine Verzögerung, Patching nicht reversibel, unflexibel |
---|
7 | c) 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 |
---|
10 | d) 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 | |
---|
14 | Vorgehen a): Bei Nutzung einer eigenen GeometryTechnique: |
---|
15 | a) TilesLoadedCallback: Muss bei VPB Datenbanken < 2.9.10 verwendet werden, da hier die DB die geometryTechnique enthält und daher terrain->terrainTechniquePrototype ignoriert. |
---|
16 | b) CustonGeometryTechniquePrototype: Kann bei VPB Datenbanken >= 2.9.10 verwendet werden, da hier in die DB keine geometryTechnique enthältund daher terrain->terrainTechniquePrototype verwendet. |
---|
17 | |
---|
18 | Vorgehen b): Bei dauerhaften Patchen: |
---|
19 | a) 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 | |
---|
21 | Vorgehen c): Bei Subdatenbanken: TBD |
---|
22 | Vorgehen d): Bei Pseudo-Loader: TBD |
---|
23 | |
---|
24 | |
---|
25 | |
---|
26 | |
---|
27 | Grundsätzliche Optionen für Heightfieldmodifikationen: |
---|
28 | a) vor dem init() Call das Heightfield modifizieren |
---|
29 | b) init() überladen und in init die modifikationen durchführen, bevor generateGeometry() aufgerufen wird. |
---|
30 | |
---|
31 | Vorgehen für das Ermitteln der korrekten Heightwerte: |
---|
32 | 1. checken ob Tile betroffen ( xmin < x < xmax && ymin < y < ymax ) oder ( latmin < lat < latmax && lonmin < lon < lonmax ) |
---|
33 | 2. Wenn Betroffen, je vertex reihe/spalte checken ob sie im bereich liegt |
---|
34 | 3. 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 | |
---|
40 | Grundsätzliche Optionen für Löcher: |
---|
41 | a) 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 |
---|
44 | b) 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 |
---|
46 | c) 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.) |
---|
48 | d) 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? |
---|