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

Aktuelle Zeit: Mo Jul 14, 2025 04:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 3D RigidBody Physics
BeitragVerfasst: So Okt 31, 2010 17:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich will mich langsam gern mal an einer 3D Physik Simulation versuchen.. erstmal nur rudimentäre dinge wie nen stapel würfel der umkippt etc..

Da ich aber im Physik Unterricht früher nicht wirklich aufgepasst hab, hab ich da ein wenig das Problem das ich nicht weiß was es alles für Kräfte etc zu beachten gibt damit es natürlich aussieht.. also Trägheit, Masse, Geschwindigkeit, Beschleunigung, Drehbewegung etc..

Gibt es da evtl ein kleines tutorial oder so dafür?
Mir würde es auch genügen ein Theoretisches Tutorial zu haben ohne Code etc.. also die Formeln in Code verpacken bekomm ich hin, nur die Formeln fehlen mir halt..

Ich hoffe da das es genauso läuft wie mit Matritzen etc.. erstmal fertige Formeln nehmen und dann wenn man sie hat langsam verstehen lernen.. :)

Also, falls da jemand ein paar Tutorials, Infos oder sonstwas hat/kennt, immer her damit! :)

Danke,
Aya~

PS: Newton, Havoc und co. möchte ich erstmal nicht nutzen da ich eben erstmal es selber machen möchte um es zu verstehen. Klar sind die fertigen PhysicEngines vermutlich besser, schneller und optimierter.. aber bevor ich die nutze möchte ich es erstmal selber bauen um zu lernen und verstehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: So Okt 31, 2010 18:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Schau dir mal mein Articulated Rigid Bodies an. Das war mein Hauptstudiums-Praktikum. Hab die Paper auch verlinkt, die sind relativ brauchbar. Allerdings rate ich dir zu einer einfacheren Kollisionserkennung, wenn es dir um Real-Time geht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 20:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

danke :)
Hab mir aber überlegt evtl erstmal doch mit 2D Physik anzufangen, und wenn ich das verstanden hab etc auf 3D zu erweitern.

So vom grund aufbau her hab ich auch nicht das Problem, also ich weiß wie man Physik Engines nutzt und wie sie vom prinzip her funktionieren, nur die Mathematik dahinter ist eben mein Problem.

Zwei simple probleme wo ich schon nicht weiter komme, die mir wenn ich die habe aber glaube ich sehr viel bringen für das verständnis:

1) Ich habe eine Kugel mit einer Masse von 100 und eine Kugel mit einer Masse von 200. Bei einer gravitation von 9.81 im Vakuum fallen ja beide gleich schnell.

Also man rechnet auf die velocity einfach den gravitations-vektor drauf.

Jetzt will ich es aber gern ein wenig natürlicher haben, also nicht im Vakuum. Es muß natürlich nicht gleich alles wie wind und co mit eingerechnet werden, aber z.B. Luftwiderstand..

Das ganze findet man als Formeln hier:
http://de.wikipedia.org/wiki/Freier_Fall

Aber da hab ich immer das Problem das das alles ja nur 1D ist und ich mich schwer tue das auf 2D umzumünzen.. abgesehen davon das ich die ganzen Formel-Zeichen nicht versteh xD


2) Ein Pendel.. das ist ja im grunde genommen ein Constraint/Joint zwischen 2 Körpern.
Auch hier habe ich das Problem das ich die Formeln die es so gibt nicht aus der Form wie sie z.B. bei Wikipedia stehen nicht auf 2D mit X/Y Koordinaten umwandeln kann..

Wenn mir da jemand nen paar tips oder hilfestellungen geben könnte würde mir das extrem weiterhelfen glaube ich.

Danke~
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 20:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bei den meisten Formeln kannst du einfach die Positions-Skalare mit Vektoren der Dimension deiner Wahl ersetzen. Für den freien Fall geht das z.B.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 20:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Mhh.. also bei dieser Formel hier:

Bild
(Quelle: http://de.wikipedia.org/wiki/Freier_Fall )

Was genau ist da dieses 'v∞' und 'v0'?
Und 'gt' ist die Gravitation zum Zeitpunkt t?

also setze ich einfach für alle v's und g's meinen 2D Vektor ein?
Und was mache ich mit 't'? oder kann ich das einfach weglassen?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 20:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ach du grüne neune ... Hab nix gesagt.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 21:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Steht doch alles dabei.

'v∞':
Bild

'v0':
v0: = v(t = 0)

Die Gravitation sollte zu jedem Zeitpunkt gleich sein. 'gt' ist einfach g*t, also Gravitation * Zeit.

Wenn du allerdings eine Physiksimulation programmieren willst, würde ich davon erstmal absehen. Was nützt dir denn diese Formel, wenn dein Objekt wärend dem Fall mit einem anderen kollidiert, sich dazu noch dreht und ähnliches?
Du solltest erstmal etwas einfacher anfangen, gerade wenn du dich damit noch nicht so wirklich auskennst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 21:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Markus hat geschrieben:
Wenn du allerdings eine Physiksimulation programmieren willst, würde ich davon erstmal absehen. Was nützt dir denn diese Formel, wenn dein Objekt wärend dem Fall mit einem anderen kollidiert, sich dazu noch dreht und ähnliches?
Du solltest erstmal etwas einfacher anfangen, gerade wenn du dich damit noch nicht so wirklich auskennst.

Du hast ja auch mal ne 2D Physik Engine geschrieben, oder?

Magst du mir ein paar einstiegstipps geben oder so?
Bzw, darf ich dich einfach mal im ICQ, MSN, Skype oder sonstwo anhauen und ein paar verständnis fragen stellen? :)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3D RigidBody Physics
BeitragVerfasst: Mo Nov 01, 2010 23:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Hi Aya,

ich habe eine nur sehr rudimentäre physik-implementierung geschrieben. Also kein Anspruch auf absoluten Realismus. :D Für meine Belange soll es nur schnell sein und mit vielen Objekten umgehen können.
Kann deswegen auch nur mit Kugeln umgehen.

Bzgl. Luftwiderstand: Da nimmt man einfach den Radius der Kugel und berechnet daraus die Fläche. r^2*pi. Bei Wikipedia gibt es zu verschiedenen Objekten eine Konstante, den Luftwiederstandsbeiwert (cw).


Bzgl. Freier Fall:

Vor jedem gerenderten Frame wird die Physik berechnet.
Jedes Objekt hat Vektoren für Position p und Geschwindigkeit v.
t ist die Zeit zwischen den Frames.
Die Schwerkraft wirkt auf die Geschwindigkeit v = v + g * t.
Die Bewegung wird mit p = p + v * t errechnet.
Wobei man g * t nur einmal pro Frame berechnen muss, und für alle Objekte verwenden kann.

Den Luftwiderstand habe ich aus der Geschwindigkeit (ich nenn sie mal vl), der Fläche, der Dichte des Mediums und dem cw-Wert des Objekts errechnet. vl = (cw * dichte * v * fläche) / 2

Nach den Bewegungen der Objekte, werden diese auf Kollisionen geprüft und ggf. abgelenkt etc.
Hier kann man noch dahingehend optimieren, dass mehrere physikschritte pro frame gemacht werden, um nicht eine Kollision zu verpassen wenn die geschwindigkeiten höher werden.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 5 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]