Ich arbeite derzeit an einem OpenGL prozeduralen Planetengenerator. Ich hoffe, dass ich es für ein Weltraum-Rollenspiel verwenden kann, bei dem die Spieler nicht auf die Oberfläche eines Planeten gelangen können. Ich habe also alles ignoriert, was mit ROAM zusammenhängt. Im Moment zeichne ich einen Würfel mit VBOs und mappe auf eine Kugel.
Ich bin mit den meisten Techniken zur Erzeugung fraktaler Höhenkarten vertraut und habe bereits eine eigene Version der Mittelpunktverschiebung implementiert (in diesem Fall ist das nicht so nützlich, wie ich es kenne).
Meine Frage ist, wie man die Höhenkarte am besten prozedural erzeugt. Ich habe bei libnoise sah , die ich Kachelbare Height / Texturen, aber so weit machen können , wie ich sehe , kann ich müsste ein Netz wie generieren diese .
Belassen Sie die Kacheln auf der Hand.
Kann mir jemand den besten Weg empfehlen?
Jede Eingabe wäre sehr dankbar.
quelle
Die Kartierung der Mittelpunktverschiebungshöhe ist ein guter Ausgangspunkt. OP, warum denkst du, ist es nicht?
OP ist gut geeignet, um die Planetenoberfläche als Cubemap zu modellieren, da jede flache Karte (z. B. Mercator-Projektion) hässliche und komplizierte Verzerrungen aufweisen kann.
Wenn ich OP wäre, würde ich zunächst die großräumige Planetengeometrie vergessen. Ich würde eine Cubemap erstellen, bei der jede Fläche 2 ** N + 1 Pixel (2,3,5,9,17,33 ...) hat und jedes Texel eine Höhe [0..N] codiert, wobei 0 die Höhe von ist der erwartete tiefste Graben und N ist die Höhe des erwarteten höchsten Berges auf dem Planeten.
Ich würde dann zufällige Höhen für die acht Eckpunkte des Würfels berechnen und diese auf die sechs Quadrate der Würfelkarte verteilen, sodass jeder Eckpunkt dreimal auftaucht.
Wenn ich rekursiv fraktale Höhen für die Mittelpunkte der Kanten generiere, würde ich sicherstellen, dass die Eckpunkte der Flächenkanten auf die andere Fläche übertragen werden, die sie gemeinsam nutzt.
Sobald ich fertig bin, habe ich eine Würfelkarte, auf der alle Kantentexel verdoppelt und alle Eckentexel verdreifacht werden. Es muss nicht in eine normale Karte konvertiert werden - ich würde den Algorithmus in Morten Mikkelsens Artikel verwenden , um Normalen zur Laufzeit direkt aus der Höhenkarte zu rendern.
Zur Laufzeit würde ich wahrscheinlich ein Quad rendern, das die Projektion des Planeten auf den Bildschirm abdeckt, und im Pixel-Shader einen Schnittpunkttest mit einer einzelnen Strahlenkugel durchführen, um festzustellen, ob und wo ich den Planeten getroffen habe. Sicher schlägt Rastern eines stark tessellierten Sphärenmodells und erhält auch eine schöne glatte Kante.
quelle
Mit der maximalen Verschiebung, die durch die absolute Länge des Pixels skaliert wird, kann schnell eine sphärische Rauschkarte erstellt werden. Farbtabellen, die Höhe, Neigung und Sonnenlicht oder Länge als Parameter verwenden, können verwendet werden, um den Planeten automatisch zu beschatten.
quelle