[C++] [Direct3D9] Sonnensystem darstellen

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.

[C++] [Direct3D9] Sonnensystem darstellen

Beitragvon Goderion » 21.05.2017, 14:10

Hallo.

Ich möchte das/unser Sonnensystem maßstabsgetreu dreidimensional darstellen.
1. Aufgrund eines bestehenden Projektes soll/muss das alles in C++ mit Direct3D9 programmiert werden.
2. Die Sonne und Planeten sollen maßstabsgetreu sein, also die Größe und Position der Himmelskörper.
3. Auf Texturen wird vorerst verzichtet, es reicht anfangs, wenn die Himmelskörper einfarbig sind (Sonne = Gelb, Erde = Blau, usw.).
4. Animationen, bzw. die Bewegung der Himmelskörper, sind auch vorerst nicht nötig.
5. Wenn möglich soll das Sonnensystem auf den Meter genau abgebildet sein.

Das erste Ziel ist einfach ein dreidimensionales statisches Sonnensystem, das man mit der Kamera frei angucken kann.

Main Plan:
1. Eine Funktion programmieren, die mir aufgrund von Parametern ein Model einer Kugel/Himmelskörpers erstellt.
2. Alle Himmelskörper als Model erstellen und in jedem Frame rendern (Brute Force).

Mögliche Ziele für die Zukunft:
1. Animation, bzw. korrekte Bewegung der Himmelskörper.
2. Texturen für die Himmelskörper.
3. Hintergrund (Sternenhimmel)

Für die aktuellen Ziele habe ich bereits recherchiert und programmiere gerade an den nötigen Funktionen.
Für die zukünftigen Ziele fehlen mir allerdings noch viele Informationen, bzw. Ideen, wie ich das vernünftig umsetzen kann.
1. Ich gehe davon aus, dass das Model eines Himmelskörpers nach der Erstellung konstant bleibt und die Position beim Rendern allein durch eine Matrix verändert wird.
2. Für die Optimierung sollte man die Himmelskörper nicht rendern, die nicht zu sehen sind, da würde mir irgendwas in Richtung Octree einfallen.
3. Beim Hintergrund bin ich komplett ahnungslos, vermutlich so ähnlich wie man bei Outdoor-Leveln den Horizont/Himmel rendert.

Sollte man vielleicht auch die Himmelskörper irgendwie weiter unterteilen. Wenn ich z.B. nah an die Sonne "fliege" und nur noch einen kleinen Ausschnitt von ihr sehen,
macht es ja eigentlich wenig Sinn, die gesamte Sonne zu rendern.
Benutzeravatar
Goderion
 
Beiträge: 82
Registriert: 16.09.2012, 12:02

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon MasterQ32 » 21.05.2017, 14:22

Zum Thema "Himmel" rendern: guck dir Krishtys Signatur an, das wichtigste hierbei ist eigentlich, dass du die Sterndaten und die Cube Map renderst

Wie nah soll man denn an die Planeten rangehen können? Das entscheided stark darüber, wie viel Aufwand und Rechenleistung das Projekt benötigt. Wenn du die Kugeln nur so groß rendern willst, dass du halt den Planet im "Fullscreen" bequem angucken kannst, musst du eigentlich nur Kugeln in den passenden Größen rendern
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1125
Registriert: 07.10.2012, 14:56

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon Goderion » 21.05.2017, 14:43

MasterQ32 hat geschrieben:Zum Thema "Himmel" rendern: guck dir Krishtys Signatur an, das wichtigste hierbei ist eigentlich, dass du die Sterndaten und die Cube Map renderst

Sieht interessant aus, werde ich mal genauer angucken.

MasterQ32 hat geschrieben:Wie nah soll man denn an die Planeten rangehen können? Das entscheided stark darüber, wie viel Aufwand und Rechenleistung das Projekt benötigt. Wenn du die Kugeln nur so groß rendern willst, dass du halt den Planet im "Fullscreen" bequem angucken kannst, musst du eigentlich nur Kugeln in den passenden Größen rendern

Man soll sich im Sonnensystem komplett frei bewegen können (Kamera kann auch durch Himmelskörper "durchfliegen").
Ich hab noch keine Ahnung, wie viele Polygone ein Himmelskörper wie z.B. die Erde benötigt. Damit das Ganze auf den Meter genau dargestellt werden kann, werden das sicher viele sein.
Für die Performance wäre es dann sicher sinnvoll, von den Himmelskörpern mehrere Modelle zu haben, von der Logik her wie bei Texturen das MipMapping.
Benutzeravatar
Goderion
 
Beiträge: 82
Registriert: 16.09.2012, 12:02

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon MasterQ32 » 21.05.2017, 18:59

Metergenauigkeit halte ich für ne schlechte Idee, just sayin. Der Level of Detail ist nicht handlebar ;)

Guck dir mal Kram über "Planet Rendering" für DirectX an, da gibts Kram im Web zu Hauf.

Was soll das ganze denn am Ende werden? Selbstzweck (also zum Lernen von DirectX), als Lernanwendung?
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1125
Registriert: 07.10.2012, 14:56

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon Schrompf » 22.05.2017, 07:18

Spannendes Unterfangen, aber die Skalen, auf denen Du Dich da bewegst, sind einfach massiv. Du brauchst auf jeden Fall double oder partitionierte Koordinatensysteme, wenn Du in der Nähe eines Himmelskörpers besser als ein paar Kilometer Genauigkeit haben willst. Als Beispiel sei hier die Outerra-Engine genannt - von denen gibt's auch einige Paper.

Oder Du bleibst in den Skalenbereichen eines - sagen wir - RTS, also eines Realtime Strategy Games. Das ist entspannte, da sind die Kugeln auf dem Bildschirm nie sonderlich nah, da kann man nen schlichten Szenengraphen aufmachen und klassisch rendern.
Häuptling von Dreamworlds. Baut an was Neuem. Hilft nebenbei nur höchst selten an der Open Asset Import Library mit.
Benutzeravatar
Schrompf
Thomas Ziegenhagen
Moderator
 
Beiträge: 3696
Registriert: 26.02.2009, 00:44
Wohnort: Dresden
Benutzertext: Lernt nur selten dazu

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon Goderion » 22.05.2017, 23:35

Vielen Dank für die Antworten!

MasterQ32 hat geschrieben:Metergenauigkeit halte ich für ne schlechte Idee, just sayin. Der Level of Detail ist nicht handlebar ;)

Merke es auch gerade beim Experimentieren.
Selbst wenn ich die Erde mit 1.310.720 Dreiecken erstelle, reicht es nicht.

MasterQ32 hat geschrieben:Guck dir mal Kram über "Planet Rendering" für DirectX an, da gibts Kram im Web zu Hauf.

Danke für den Hinweis, aber das wird dann vermutlich zu aufwändig.

MasterQ32 hat geschrieben:Was soll das ganze denn am Ende werden? Selbstzweck (also zum Lernen von DirectX), als Lernanwendung?

Eigentlich soll das nur ein kleines Experiment werden. Ich interessiere mich etwas für das Universum und gucke gerne Dokumentationen darüber.
Ich wollte mal aus Spaß schnell das Sonnensystem nachbauen und darin "rumfliegen", um ein bessere Gefühl für die Größen und Abstände der Planeten zu bekommen.
Das "Direct3D9-Training" ist ein schöner Bonus.
Die Genauigkeit auf einen Meter wollte ich aus anderen Gründen haben. Vor einigen Tagen bin ich auf Youtube über "Flacherdler" gestolpert und deren absurden Theorien.
Mit dem Modell wollte ich experimentell einige Behauptungen nachprüfen, z.B. warum man in einer Höhe von 30km keine Erdkrümmung sieht und ob ein Objekt in 5km Entfernung aufgrund der Krümmung 2 Meter tiefer liegt, usw.. Klar, kann man alles berechnen, ich wollte aber was Visuelles.
Guckt euch die Flacherdler auf Youtube bloß nicht an, komplette Zeitverschwendung! Langsam glaube ich, dass 99% von denen das nur zum Trollen machen.

Schrompf hat geschrieben:Spannendes Unterfangen, aber die Skalen, auf denen Du Dich da bewegst, sind einfach massiv. Du brauchst auf jeden Fall double oder partitionierte Koordinatensysteme, wenn Du in der Nähe eines Himmelskörpers besser als ein paar Kilometer Genauigkeit haben willst. Als Beispiel sei hier die Outerra-Engine genannt - von denen gibt's auch einige Paper.

Das riecht nach viel Arbeit. Outerra ist ja ein interessantes Projekt.

Schrompf hat geschrieben:Oder Du bleibst in den Skalenbereichen eines - sagen wir - RTS, also eines Realtime Strategy Games. Das ist entspannte, da sind die Kugeln auf dem Bildschirm nie sonderlich nah, da kann man nen schlichten Szenengraphen aufmachen und klassisch rendern.

Da das wie gesagt eigentlich nur ein kleines Experiment sein soll, werde ich, um schnell ans Ziel zu kommen, alle Planeten mit max 100.000 Dreiecken erstellen und Alles unoptimiert rendern.

Sollte ich das Experiment weiter fortführen, werde ich auf die Hinweise und Tips zurückkommen.
Dateianhänge
earth.jpg
Kugel/Icosphere aus 1.310.720 Dreiecken
Benutzeravatar
Goderion
 
Beiträge: 82
Registriert: 16.09.2012, 12:02

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon MasterQ32 » 23.05.2017, 00:31

Mit dem Modell wollte ich experimentell einige Behauptungen nachprüfen, z.B. warum man in einer Höhe von 30km keine Erdkrümmung sieht und ob ein Objekt in 5km Entfernung aufgrund der Krümmung 2 Meter tiefer liegt, usw.. Klar, kann man alles berechnen, ich wollte aber was Visuelles.


Dafür würde ich dir eher einen Raytracer empfehlen. Der kann nämlich Kugeln beliebiger Größe mit "perfekter" Präzision darstellen. So ein Projekt wäre durchaus gut umsetzbar, was Echtzeitraytracing in einem Pixelshader angeht, da du ja nur 10 Kugeln rendern möchtest :P

Aber viel Erfolg mit deinem Projekt!
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1125
Registriert: 07.10.2012, 14:56

Re: [C++] [Direct3D9] Sonnensystem darstellen

Beitragvon Alexander Kornrumpf » 23.05.2017, 00:32

Goderion hat geschrieben:Ich wollte mal aus Spaß schnell das Sonnensystem nachbauen und darin "rumfliegen", um ein bessere Gefühl für die Größen und Abstände der Planeten zu bekommen.


Dafür ist nicht unbedingt eine hohe Auflösung nötig, siehe:

http://joshworth.com/dev/pixelspace/pix ... ystem.html

Kann gut sein, dass ich den Link ursprünglich aus diesem Forum hatte.
Alexander Kornrumpf
Moderator
 
Beiträge: 1625
Registriert: 25.02.2009, 14:37


Zurück zu Grafikprogrammierung

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 2 Gäste