Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 15:42

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Physics Engine
BeitragVerfasst: Mo Nov 30, 2015 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Ich habe Momentan Probleme mich zu entscheiden, wie ich Physik für mein object pascal Projekt, vor dem Hintergrund, dass ich am ende meine eigne implementierung erstellt haben will, angehe:
-fange ich direkt an eine eigene Lösung für meinen Bedarf zu schreiben
-suche mir eine Bibliothek, um zunächt alles am laufen zu haben und baue später mit den gewonnenen Erfahrungen meine eigene Lösung

Wenn eine Bibliothek, welche wäre eurer Meinung nach einen Blick Wert?

mfg FrenK


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Physics Engine
BeitragVerfasst: Di Dez 01, 2015 12:57 
Offline
DGL Member

Registriert: Mo Nov 09, 2009 12:01
Beiträge: 200
Ich würde erst einmal mit Vorhandenem rumprobieren und dann sehr klein anfangen.

http://www.saschawillems.de/?page_id=76
https://github.com/nakijun/box2d-delphi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Physics Engine
BeitragVerfasst: Mi Dez 02, 2015 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2621
Wohnort: Berlin
Programmiersprache: Go, C/C++
Physik teilt sich in mehrere Bereiche, einiges findet man auch in unserem Wiki dazu.
-Spatial System
-Kollisionserkennung
-Kräfte System
--Interpolation
--Extrapolation
--korrektur von Position, Kräften, Ausrichtung
--Softbody
Man kann es bestimmt noch ein bisschen weiter zerlegen und sich dann die Sachen raus picken die man für sich selber braucht.

Motivationsbedingt würde ich ein existierendes Kollisionssystem verwenden wie z.B. von Bullet Physics(3D) oder Box2D.
Spatial System würde ich erstmal ignorieren und basic Kräfte System aufbauen.
Später ein Spatial System integrieren, damit die Kräfte abhängig von Skalierung auch immer noch funktioniert.
Kollisionssystem würde ich als letzten anfassen, da die sehr gut abstrahierbar sind und in der regel gut optimiert sind.

Physiksysteme für Spiele sind in der Regel sehr primitive und einfach zu entwickeln aber Physik Simulation ist ziemlich schwer und findet wenig einsatz in Spielen.

Wenn man AI auch entwickeln will, dann sollte man gucken, dass man die Kollision auch vom Kräftesystem fern hällt.
Die AI basiert eigentlich auf Sensoren und diese werden über Raycasts, Kreisen, Spähren, Boxen und anderen Geometrien gebaut und wenn man dann schon die Informationen vom Kollissionssystem nutzen kann ist das alles um einiges einfacher.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Physics Engine
BeitragVerfasst: So Dez 06, 2015 23:10 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Ich kann hier auch allerwärmstens bullet physics empfehlen!
Funktioniert super, ist open source und kann echt einiges, und zwar auch vieles, was man nicht selber erst schreiben will.
Habe irgendwo gelesen, dass GTA 4 und 5 auch bullet physics verwenden, und ich finde, da sieht man, dass es gut funktioniert.

Da es open source ist, kannst Du es auch beliebig erweitern, wenn Du irgendwas spezielles brauchst, und glaub mir, Du wirst überrascht sein, wie schnell Du damit richtig schöne Kollisionen in deinem Programm hast und wieviel Arbeit Du dir damit sparst.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Physics Engine
BeitragVerfasst: Mo Dez 07, 2015 15:08 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Also Generell ist die Entwicklung einer einfachen Physikengine auf Impulsebasis nicht schwer.
Das schwierige daran sind performante, robuste und korrekte Kontaktgeneratoren zu programmieren.

Die Impulse für jeden Kontakt bestimmt man dann relative einfach:

Code:
  1.  
  2. // Define impulse
  3. float massRatio = 1f / (invMassA + invMassB);
  4. float impulse = -(1f + restitution) * dot(relativeVelocity, normal) * massRatio;
  5.  
  6. // Accumulate impulse
  7. float newImpulse = Math.min(impulse + contact.impulse, 0);
  8. impulse = newImpulse - contact.impulse;
  9. contact.impulse = newImpulse;
  10.  
  11. // Apply impulses
  12. velA += normal * impulse * invMassA;
  13. velB -= normal * impulse * invMassB;
  14.  


Das reicht in der Regel für einfache Sachen vollkommen aus.
Allerdings braucht man noch ne gute Positionskorrektur und da gibts einige Ansätze:

- Distance / Dt in Impulse mit einfließen lassen
- Baumgarte Stabilisierung (20-50% der Penetration lösen)
- Immer n-Prozent der Penetration lösen
- Distance-Constraints

und was hier natürlich auch noch fehlt ist Rotationsdynamik, dass bringt zwar noch ein wenig mehr Komplexität rein aber ist eigentlich auch nicht so schwer - zumindest in 2D.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Physics Engine
BeitragVerfasst: Mo Dez 07, 2015 17:01 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Es kommt natürlich immer auf die Ansprüche an. Ich beschäftige mich zur Zeit mit einer Physiksimulation in der sich ausschließlich zweidimensionale Einheitskreise bewegen. Klingt einfach. Ist es aber nur so lange bis man auf Schwierigkeiten in dem Ansatz stößt und man zum Beispiel Energieerhaltung benötigt.
https://en.wikipedia.org/wiki/Energy_drift
http://lolengine.net/blog/2011/12/14/understanding-motion-in-games


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Physics Engine
BeitragVerfasst: Mo Dez 07, 2015 22:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
@Vinz
Bullet hat meines wissens nach leider keinen c header.
Freepascal ist noch nicht soweit, das man c++ code mit aufnehmen kann und zusätlich einen Wrapper zu schreiben,
ist mir den Aufwand momentan nicht wert.

@OpenglerF
Klingt interessant auch wenn es in eine andere Richtung geht. Werde mir interesse halber die Links mal anschauen

Werde es denke ich erstmal mit Newton probieren und mich wie von TAK2004 vorgeschlagen langsam rantasten.

Danke für eure Antworten,
mfg FrenK


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.120s | 19 Queries | GZIP : On ]