Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1415:projekte_im_wintersemester_2014_15:3d-generationsalgorithmus [2015/03/12 05:41] maxiw |
ws1415:projekte_im_wintersemester_2014_15:3d-generationsalgorithmus [2016/05/10 14:46] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== 3D-Generationsalgorithmus ====== | ====== 3D-Generationsalgorithmus ====== | ||
- | + | ===== Code ===== | |
- | Der finale Code zur Generierung 3Dimensionalen Terrains: | + | |
* [[3dgen.py]] | * [[3dgen.py]] | ||
* [[perlin3D.py-3dgen|perlin3D.py]] | * [[perlin3D.py-3dgen|perlin3D.py]] | ||
Zeile 10: | Zeile 8: | ||
{{:ws1415:projekte_im_wintersemester_2014_15:p3noise.png?300|Listenpunkt}} | {{:ws1415:projekte_im_wintersemester_2014_15:p3noise.png?300|Listenpunkt}} | ||
+ | |||
+ | ===== Beschreibung ===== | ||
+ | Um gutaussehendes 3-Dimensionales Terrain zu generieren werden 2D und 3D Perlin-Noise-Algorithmen verwendet. | ||
+ | Während man mithilfe einer üblichen Heightmap zwar relativ realistische Hügel erstellen kann, ist es nicht möglich nur | ||
+ | durch eine heightmap Terrain zu erstellen, dass mehr als einen Höhenwert übereinander benötigt. (Beispielsweise Überhänge) | ||
+ | 3D-Noise alleine bildet allerdings keine einheiteliche Oberfläche, sondern bildet eher "Blasen" im Raum, ist also auch keine Lösung. | ||
+ | Aus diesem Grund verwenden wir zuerst eine 2D Heightmap die grob die Form des Terrains vorgibt und erweitern diese dann mithilfe von 3D-Noise. | ||
+ | |||
+ | Der Programm selbst arbeitet folgendermaßen: | ||
+ | * Zuerst wird mithilfe von 2D-noise eine Heightmap erstellt. | ||
+ | * Führe für jeden Punkte der heightmap folgendes aus: | ||
+ | * Berechne von der minimalen bis zur maximalen Höhe 3D-Perlin Noise | ||
+ | * Addiere den Wert der Anpassungsfunktion (mit dem Wert der Heightmap als Parameter) zu dem 3D-Noise Wert und füge diesen der Ausgabeliste hinzu. | ||
+ | * Trianguliere zuletzt mithilfe des [[Marching-Cube]] Algorithmus die sich daraus ergebende Oberfläche | ||
+ | Die oben genannte Anpassungsfunktion nimmt dabei eine besonders wichtige Rolle ein und kann je nach Terrain abgeändert werden. | ||
+ | Grundsätzlich soll sie dafür sorgen, dass Werte unter der von der Heightmap vorgegebenen Höhe vor allem als Boden markiert werden. | ||
+ | |||
+ | In dem Code-Beispiel lautet die Anpassungsfunktion $f(x) = (x-h-30)^3\cdot-0.025$ | ||
+ | |||
+ | Dabei ist h der von der heightmap vorgegebene Höhenwert und x läuft in unserem Fall von 0 bis 60. | ||
+ | |||
+ | |||