Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DarioFrodo

Treue Seele

  • »DarioFrodo« ist der Autor dieses Themas

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

1

23.09.2011, 18:07

Himmelskörper rendern in Originalgröße

Ich will ein Spiel programmieren, in dem man das ganze Universum bereisen kann (generiert) und
alle Himmelskörper (Planeten, Sterne, Asteroiden, etc.) in Originalgröße bereisen kann (theoretisch).

Es ist natürlich nicht möglich einen Himmelskörper im hohen Detail direkt als Mesh abzubilden.
Wenn man z.B. die Erde nimmt (mit einem Radius von 6,387 km) und für jeden Meter 4 Byte benötigt, kommt man auf ca. 7 Petabyte an benötigten Speicher.
Der größte bekannte Stern hat einen Radius von 150 Lichtjahren.

In meinem Spiel will ich den Spieler diese Größen "spüren" lassen. Er soll wirklich begreifen was diese Werte bedeuten.
Daher suche ich nach einem Algorithmus bsp. eine Kugel entsprechend generieren zu können.
Desto näher man dem Himmelskörper kommt, desto weniger sieht man davon. Aber das wenige sollte dafür mehr Details aufweisen.

Bisher habe ich zwei Techniken kennengelernt eine Kugel zu generien..
edit: ich habe die Screenshots verbummelt, tut mir leid :/

Kennt ihr noch andere Techniken bei denen man teile der Kugel mit höherer Auflösung abbilden kann?
Und dazu eine Möglichkeit dort noch Berge entstehen zu lassen. Kein Planet ist glatt.

edit: ich habe die Screenshots verbummelt, tut mir leid :/
Den Algorithmus den ich bisher gefunden habe, der dauert zu lange (208 Sekunden bei 1.000.000 Vertices, 4 Kerne @2,33 GHz, 6 Threads).
Bei diesem wird eine zufällige Ebene erzeugt, welche die Kugel schneidet und alle Punkte auf der einen Seite etwas höher macht (läge erhöht) und auf der anderen Seite etwas kleiner. Im Beispiel Bild werden 10.000 Iterationen verwendet.
Kennt ihr noch andere schnelle Algorithmen für Terrains auf Kugeln, die sich idealerweise kombinieren lassen mit einer Kugel mit verschiedenen Auflösungen?
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DarioFrodo« (29.07.2019, 17:45)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

23.09.2011, 18:24

Wie waers mit Raytracing fuer das Objekt, was am naechsten ist? Fuer den Rest sollten Billboards reichen, die man aller paar Sekunden updatet.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

23.09.2011, 18:25

Knifflige Aufgabenstellung. Vielleicht Tesselation mit aktueller Hardware und Displacement der generierten Vertizes mittels fraktaler Funktionen?

Nebenbei bemerkt: mach Dir erstmal nicht so viel Mühe mit dem genauen Generieren der Planetenoberflächen. Ich fürchte nämlich, dass Du nicht so viele "Beeindruckend"-Reaktionen bekommen wirst, wenn das mal jemand spielt, sondern vielmehr "Och, wann ist denn das endlich zu Ende".
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

23.09.2011, 18:26

Bei diesen Dimensionen solltest du dir auch erstmal ganz gut überlegen, wie eigentlich deine Koordinatensysteme genau aussehen. Denn einfach mal float oder double nehmen is da nicht...

5

23.09.2011, 18:36

Wieso nicht dot? Je nach Zoomfaktor hat dann eben 1.0 einen höheren/niedrigeren Wert (z.B. 1.0 entspricht einem Meter oder, wenn weiter weg, 1.0 entspricht einem Kilometer)...

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

23.09.2011, 18:39

Beeindruckende Beschreibung der Funktion einer Fliesskommazahl.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

23.09.2011, 18:39

Eben. Wo ist der Ursprung deines Universums? Ab einer gewissen Entfernung vom Ursprung wird die Genauigkeit von float/double nichtmehr ausreichen. In unmittelbarer Nähe zu Ursprung wird dein float auf die Breite eines Atoms genau sein, wenn du 100000km weit weg bist, isses plötzlich nurhmehr auf ganze Kilometer genau...

8

23.09.2011, 18:45

Wenn du weit weg bist, mcht ein paar Kilometer dann was aus?
Das wäre dann halt die nächste Frage... Aber eigentlich ist das auch nicht so Wichtig. Ist nämlich eh nicht toll die Werte die ganze Zeit anzupassen...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

23.09.2011, 18:47

Wenn dein Raumschiff sich auf einmal nurmehr in ganzen Kilometerschritten bewegen kann, macht das ziemlich was aus, wenn du mich fragst. Dann wirds nämlich ewig lang an einem Fleck bleiben und dann alle paar Sekunden einen Kilometer weiterspringen, anstatt sich langsam zu bewegen...

10

23.09.2011, 18:49

Mhh, stimmt, daran hätte man denken müssen. War auch eine sehr schnelle und unbedachte Antwort von mir... Entschuldigung. :(

Werbeanzeige

Ähnliche Themen