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

Thargan

Frischling

  • »Thargan« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Lübeck

  • Private Nachricht senden

1

23.11.2014, 05:35

SpaceEngine Clone

Hallo,

Details über mich gibts hier .
Die Idee zu dem Projekt ist im laufe von fast 20 Jahren gewachsen und liegt inzwischen fast 30 Jahre zurück.

Ich suche kein Team und kann für eventuelle Hilfe keine Bezahlung leisten. Weiterhin ist es nicht mein Ziel mit diesem Projekt Geld zu machen.
Sollte sich jemand angesprochen fühlen, weil ihn das Thema interessiert und er gerne etwas beitragen möchte, bin ich natürlich sehr interessiert.

Ich arbeite an einem SpaceEngine Clone, also einem Kosmos Simmulator, der es ermöglicht, mit einem "Raumschiff" durch ein statisches(keine Relativität) Weltall zu Reisen und dabei neue Galaxien zu entdecken und zu erforschen. Dabei kann man allen bekannten Phänomenen im Kosmos begegnen und genauer betrachten. Dazu werden sämtliche Galaxien, Sonnen und Planetensysteme, Gaswolken usw. "zufällig" erzeugt und die real bekannten Objekte entsprechend dargestellt.

Die Option bleibt offen, das ganze als Engine für Spiele zu verwenden.

Ich habe zwar schon viele Tests in Bezug auf das Projekt gemacht und ausprobiert, allerdings ist vieles davon nach 10 Jahren veraltet, oder wurde damals schlecht umgesetzt.
Somit fange ich praktisch bei Null an, allerdings mit der Erfahrung der Fehlschläge.
Somit bin ich bereit für neue Fehlschläge und beginne damit ein paar Tools zu bauen um langsam wieder warm zu laufen.

Starten werde ich mit einem Planetengenerator, der mir eine Cube-Textur erzeugt, die sowohl die Basis der Planetenstruktur liefert, als auch die Haut des Planeten aus dem Orbit darstellt, sowie die Normalen liefert, um das ganze plastisch wirken zu lassen.

Wie könnt Ihr mir helfen ?

Es gibt ein paar Punkte, über die ich mir noch nicht im klaren bin.

1. Wie stelle ich die Helligkeiten(Magnituden) der Objekte glaubhaft dar ?
Ich kenne die Formeln, aber weis nicht genau wie ich die Abstufungen darstellen soll.

2. Wie organisiere ich die Koordinatensysteme bzw. den Masstab, damit sie fliessend ineinander übergehen ?
Mein letzter Stand war der, dass ich für jedes Koordinatensystem/Masstab(also Kosmos, Galaxie, Sonnensystem, Planeten und Monde) zeitgleich eine eigene Position berechne.
Vermutlich wird es dabei bleiben, nur das nur die Position berechnet werden muss, in dessen Koordinatensystem bzw. Bezugssystem oder Massefeld sich das Raumschiff gerade befindet.

3. Ich habe damals einen Ikosaeder also 10flächner als Planetenkörper verwendet. Einfach deshalb, weil beim tesselieren der Dreiecke die geringsten Verzerrungen auftreten.
Heute liebäugele ich wieder damit, weil ich dadurch mit 10 1024er Texturen eine hübsche Auflösung der Grundoberfläche erhalte. Allerding braucht die Echtzeitberechnung fast doppelt so lange, als für eine Cube-Textur.
Was würdet Ihr mir empfehlen ?

4. Wie bringe ich Keplers Gesetze zu Programm ?
Ich habe viel gegoogled aber nichts konkretes gefunden. Die Umsetzung der Formeln ist mir z.Z. nicht möglich(zu dumm).
Deshalb wäre ein Code sehr recht. Also es geht mir um das zwei Körper Problem, denke ich und dabei, dass der Körper zu einer Zeit irgendwo beginnt und dann je nach Zeit neu positioniert wird und zwar so, wie man es nach Kepler auf einer Elipse erwarten würde. Wie man das einfach nur auf einer Elipse macht, würde ich wohl hin bekommen, aber mit der Beschleunigung je nach Perihel oder Aphel bekomme ich das nicht hin.

Ich glaube das wärs erstmal.
bye

2

23.11.2014, 21:10

4. Wie bringe ich Keplers Gesetze zu Programm ?

Ich greife mir den Punkt mal raus.

Du kannst dieses Problem entweder schon "vor berechnen", sodass du eben vorher genau weist, wo ein Planet wann zu sein hat. Dann hast du quasi eine Liste von Positionen (oder eine Funktion, die dir die Positionen gibt). Wenn du dann noch unterschiedliche Geschwindigkeiten haben willst, multiplizierst du je nach Position eben einen Faktor an die verstrichene Zeit oder rechnest halt entsprechend die Positionen aus.
Dieser Ansatz ist schlichtweg falsch, falls du mehr als 2 Körper hast, die sich gegenseitig beeinflussen. Dann wird das System chaotisch und kann nicht mehr im voraus berechnet werden.

Die Zweite Möglichkeit ist, das ganze physikalisch korrekt zu machen. Im Grunde brauchst du für die Lösung des Zweikörperproblem nichts anderes als das Potential (und daraus kannst du dir durch einfaches ableiten die Kraft errechnen) zwischen den beiden Körpern. Aus der Kraft bekommst du die Änderung des Impulses/der Geschwindigkeit und mit der Geschwindigkeit hast du die Änderung der Position.
Ganz simpel kann man das mit einem Newton-Verfahren (frag wiki) am PC berechnen. Steht alles HIER, wobei für mehrere Körper die Kräfte dann vektoriell additiv sind.



Ich habe viel gegoogled aber nichts konkretes gefunden. Die Umsetzung der Formeln ist mir z.Z. nicht möglich(zu dumm).

Auf der oben genannten Wiki Seite steht alles. Dann braucht es lediglich ein wenig Oberstufen-Mathe. Die musst du dir aber selbst beibringen.

Pseudocode Für Planet o:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
F = 0;
foreach (p in planets)
{
    if(p!= o)
        F+=-Gm1m2*(1/r**2);
}
a = F/m1;
v=v_0+a*deltaT;
x=x_0 + v*deltaT;

F,a,v und x sind Vektoren.

So Far...
Laguna
Portfolio runvs.io | Gamejolt | itch.io | PEWN | Twitter

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Laguna« (23.11.2014, 21:19)


Thargan

Frischling

  • »Thargan« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Lübeck

  • Private Nachricht senden

3

23.11.2014, 21:27

Ja, ich kenne die Seite und blicke nicht recht durch. Es geht um Vektoren, Massen und Elipsen usw.

Ich glaube nicht, dass ich die Körper physikalisch kreisen lassen will, da leichteste Störungen des Programms zu erheblichen Fehlern führen können und werden.
Ich möchte mich auf die feste Umlaufzeit konzentrieren und in dem Sinne die Beschleunigungen ermitteln bzw. den zurückgelegten Winkel seit der Zeit der letzten Aktualisierung.

Naja und wie schon beschrieben bekomme ich die Formeln nicht umgestellt und daraus kein Programm zustande. Bis ich dafür eine Lösung habe, werde ich einfach die Umlaufbewegung in Abhängigkeit der Frames linear berechnen. Aber es ist doof.

Wenn da also jemand ein Codeschnipsel hat...

bye

Werbeanzeige