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.
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.
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..
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.
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 network • my 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
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 network • my 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
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.
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?
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. 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"
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.