[C++] [Direct3D9] Sonnensystem darstellen
[C++] [Direct3D9] Sonnensystem darstellen
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.
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.
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [C++] [Direct3D9] Sonnensystem darstellen
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
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
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
Re: [C++] [Direct3D9] Sonnensystem darstellen
Sieht interessant aus, werde ich mal genauer angucken.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
Man soll sich im Sonnensystem komplett frei bewegen können (Kamera kann auch durch Himmelskörper "durchfliegen").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
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.
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [C++] [Direct3D9] Sonnensystem darstellen
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?
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?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: [C++] [Direct3D9] Sonnensystem darstellen
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.
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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [C++] [Direct3D9] Sonnensystem darstellen
Vielen Dank für die Antworten!
Selbst wenn ich die Erde mit 1.310.720 Dreiecken erstelle, reicht es nicht.
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.
Sollte ich das Experiment weiter fortführen, werde ich auf die Hinweise und Tips zurückkommen.
Merke es auch gerade beim Experimentieren.MasterQ32 hat geschrieben:Metergenauigkeit halte ich für ne schlechte Idee, just sayin. Der Level of Detail ist nicht handlebar ;)
Selbst wenn ich die Erde mit 1.310.720 Dreiecken erstelle, reicht es nicht.
Danke für den Hinweis, aber das wird dann vermutlich zu aufwändig.MasterQ32 hat geschrieben:Guck dir mal Kram über "Planet Rendering" für DirectX an, da gibts Kram im Web zu Hauf.
Eigentlich soll das nur ein kleines Experiment werden. Ich interessiere mich etwas für das Universum und gucke gerne Dokumentationen darüber.MasterQ32 hat geschrieben:Was soll das ganze denn am Ende werden? Selbstzweck (also zum Lernen von DirectX), als Lernanwendung?
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.
Das riecht nach viel Arbeit. Outerra ist ja ein interessantes Projekt.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.
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.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.
Sollte ich das Experiment weiter fortführen, werde ich auf die Hinweise und Tips zurückkommen.
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: [C++] [Direct3D9] Sonnensystem darstellen
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 :PMit 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.
Aber viel Erfolg mit deinem Projekt!
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
-
- Moderator
- Beiträge: 2114
- Registriert: 25.02.2009, 13:37
Re: [C++] [Direct3D9] Sonnensystem darstellen
Dafür ist nicht unbedingt eine hohe Auflösung nötig, siehe: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.
http://joshworth.com/dev/pixelspace/pix ... ystem.html
Kann gut sein, dass ich den Link ursprünglich aus diesem Forum hatte.
Re: [C++] [Direct3D9] Sonnensystem darstellen
[edit] Gerade gesehen, wie alt das Thema schon ist... Ich habe einfach nur die erste Seite von "Grafikprogrammierung" angeschaut, sieht so aus als sei im Zfx nicht mehr viel los.... [/edit]
Genau den Link wollte ich auch gerade posten...
Ein maßstabsgetreues Sonnensystem ist einfach ziemlich langweilig. Unser Sonnensystem ist selbst in sehr guten Näherungen komplett leer (nur in extrem guten sieht man die winzigen Planeten) und so ziemlich alles was du jemals sehen wirst, ist eine kleine Sonne und winzige, punktförmige Planeten. Man will auch nicht in der Egoperspektive durch das Sonnensytem fliegen, weil man entweder viel zu lange unterwegs ist, oder an sämtlichen Planeten vorbeirauscht.
Selbst die größten Objekte am Himmel, also Sonne und Mond werden in der Kunst regelmäßig viel viel zu groß dargestellt. Es gibt sogar eine Gleichnamige Illusion, die Mondtäuschung.
Die Frage ist also letztendlich, was genau willst du am Ende haben? Klar kannst du es so wie geplant simulieren, aber das ist einfach extrem langweilig und ein "man sieht nur schwarz bis auf einen einzelnen Pixel, und selbst der ist nicht maßstabsgetreu, weil die Auflösung zu grob war" kriegst du halt auch ohne viel Code hin. Ich finde diese 2D Webseite von Alex diesbezüglich schon sehr anschaulich (die, und das sollte man sich klar machen, nur die minimalen Entfernungen angibt. In Wirklichkeit sind die Planeten ja irgendwo auf ihren Kreisbahnen, können also auch auf der anderen Seite der Sonne sein und dann sind die Entfernungen noch viel größer...)
Genau den Link wollte ich auch gerade posten...
Ein maßstabsgetreues Sonnensystem ist einfach ziemlich langweilig. Unser Sonnensystem ist selbst in sehr guten Näherungen komplett leer (nur in extrem guten sieht man die winzigen Planeten) und so ziemlich alles was du jemals sehen wirst, ist eine kleine Sonne und winzige, punktförmige Planeten. Man will auch nicht in der Egoperspektive durch das Sonnensytem fliegen, weil man entweder viel zu lange unterwegs ist, oder an sämtlichen Planeten vorbeirauscht.
Selbst die größten Objekte am Himmel, also Sonne und Mond werden in der Kunst regelmäßig viel viel zu groß dargestellt. Es gibt sogar eine Gleichnamige Illusion, die Mondtäuschung.
Die Frage ist also letztendlich, was genau willst du am Ende haben? Klar kannst du es so wie geplant simulieren, aber das ist einfach extrem langweilig und ein "man sieht nur schwarz bis auf einen einzelnen Pixel, und selbst der ist nicht maßstabsgetreu, weil die Auflösung zu grob war" kriegst du halt auch ohne viel Code hin. Ich finde diese 2D Webseite von Alex diesbezüglich schon sehr anschaulich (die, und das sollte man sich klar machen, nur die minimalen Entfernungen angibt. In Wirklichkeit sind die Planeten ja irgendwo auf ihren Kreisbahnen, können also auch auf der anderen Seite der Sonne sein und dann sind die Entfernungen noch viel größer...)
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/