Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1415:projekte_im_wintersemester_2014_15:3d-generationsalgorithmus

3D-Generationsalgorithmus

Code

Beispielergebnis mit angepassten Variablen:

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.

ws1415/projekte_im_wintersemester_2014_15/3d-generationsalgorithmus.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)