Ideen / Hilfe beim Schreiben einer 3D- Physic Engine

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Ideen / Hilfe beim Schreiben einer 3D- Physic Engine

Beitrag von corpsman »

Hallo Zusammen,

Ich versuche mich gerade daran eine 3D Physik Engine zu schreiben, natürlich Quelloffen und wer Lust hat sich meinen Fortschritt an zu sehen, der kann dass hier tun.

Meine "Todoliste" für dieses Vorhaben sieht aktuell so aus:

1. Convexe Collider erzeugen
2. Mittels "kräften" und Zeit die Collider bewegen
3. Mittels SAT erkennen ob Collider sich berühren
4. Berührpunkte berechnen
5. Objecte wieder "trennen"
6. Kräfte übertragen
7. Zurück zu 2.

Dank Youtube, Wikipedia und ChatGTP habe ich 1., 2. 3. 5. und 7 auch schon halbwegs umsetzen können.

Aktuell Hänge ich daran, wie ich die Berührpunkte für die Kraftübertragung berechnen kann.
Dazu habe ich folgende Informationen:
1. die Facelisten (Dreiecke und Normalen) beider Convexer Hüllen
2. die Normale und "eintauchtiefe" über die man die beiden Hüllen wieder trennen kann.
3. Die Schwerpunkte beider Convexer Hüllen

Angeblich bekommt man den Berührpunkt (es reicht wohl einer, obwohl das 1 bis 4 sein können) in dem man einfach die Punktwolke beider Convexen Hüllen mit der Normalen Multipliziert und dann den Punkt mit dem "kleinsten" abstand nimmt.
Das habe ich versucht und es kommt murx raus, laut google liegt das daran das eben jedes Beschriebene Verfahren bei Box-Box Kollisionen genau nicht funktioniert und ich würde das aber gerne Unterstützen ..

Hat jemand zufällig Zugriff auf Informationen die mir hier weiter helfen ? ggf. eigene Erfahren die man tauschen kann ? Gibts nen Trick das aus den SAT Info's zu bekommen ? Habe ich was übersehen ?

Ich bin für alle Ideen Offen und freue mich über Feedback ;)
--
Just try it

Mathias
Beiträge: 6927
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ideen / Hilfe beim Schreiben einer 3D- Physic Engine

Beitrag von Mathias »

Ich wollte dein Beispiel probieren, aber es kommt:

Code: Alles auswählen

ucorp3dobjects.pas(22,22) Error: Kann uvectormath nicht finden verwendet von ucorp3dobjects des Projektinspektors.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Ideen / Hilfe beim Schreiben einer 3D- Physic Engine

Beitrag von corpsman »

Steht doch auf der 1. Seite ?
What is needed to compile and run the examples ?

clone this repository
download uvectormath.pas

Now you have everything to compile the engine. In order to be able to compile the examples you also need to be able to use OpenGL:

install LazOpenGLControl into the Lazarus IDE
download dglOpenGL.pas
--
Just try it

Helios
Lazarusforum e. V.
Beiträge: 120
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 4.0 Windows 10 64Bit / Arch Linux 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Ideen / Hilfe beim Schreiben einer 3D- Physic Engine

Beitrag von Helios »

Hallo corpsman,
schönes Thema, finde ich hochinteressant!
Ich habe ohne tief in Deine Programme einzusteigen folgendes Buch als Empfehlung gefunden (falls noch nicht bekannt):
Christer_Ericson-Real-Time_Collision_Detection(.pdf).
Evtl. darin das Chapter 9: Convexity-based Methods?
Macht für mich auf den ersten Blick einen verheissungsvollen Eindruck (übersichtlich und nicht ohne Mathematik ;-)
Viel Erfolg, ich bin gespannt auf Deine Ergebnisse (bin ein großer Fan von "Elite" seit C64 Zeiten und damit auch von 3D
Physics Engines ohne sehr tief darin eingestiegen zu sein).

Gruß
Helios

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1629
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Ideen / Hilfe beim Schreiben einer 3D- Physic Engine

Beitrag von corpsman »

Kante ich noch nicht sieht aber auf den ersten blick echt toll aus, danke nu hab ich erst mal wieder was zum Lesen ;)
--
Just try it

Antworten