Seite 3 von 4

Re: Circle Physic Engine Userlib

Verfasst: 19.08.2010 13:58
von STARGÅTE
Soweit ich das mitbekommen habe gibs in der Physik Luftreibung, somit hält eine Objekt irgendwann seine Geschwindigkeit wenn sich Anziehungskraft und Reibungskraft sich aufheben.

ggf. muss du einfach nur die Reibung auf 0 setzen.

Die Rotation von Objekten wird vermutlich noch kommen ...

Zunächst werde ich mich am WE versuchen das Include von ARRAY -> LIST umzuschreiben ...
Wenn oh... well?! dann damit zufrieden ist gehts weiter ...

Zum Beispiel könnte man dann noch ein Medium einführen, welches "hinter" den Objekten gelegt wird, und somit die Bewegung verändert. -> Vakuum, Luft, Wasser, Öl, Honig ...

Deine Erkenntnisse zu Rotation wären bestimmt nützlich,
ich selber hatte mich immer schwer getan das genaue Verhältnis zu bestimmen
wie sich die Energie die ein Körper bekommt (Stoß)
in translation und rotation aufteilt ...

Re: Circle Physic Engine Userlib

Verfasst: 19.08.2010 14:55
von mpz
Hi,

diese Funktionen sind in Chipmunk (version 5.3.1) gut integriert. Damit beschäftigt sich ja Dr.Shrek. Man muss "nur" den Code in PB umsetzen. Ich habe aber auch ein paar Codes zu diesme Thema gefunden. Sobald ich ein paar Funktionne übersetzt habe schreibe ich hier ...

Gruß Michael

Re: Circle Physic Engine Userlib

Verfasst: 19.08.2010 17:32
von oh... well?!
STARGÅTE hat geschrieben:Die Rotation von Objekten wird vermutlich noch kommen ...
nbisschen Arbeit wollt ich euch ja auch noch überlassen... :lol:

Also Drehung (momentum) gibt noch nich bei den Objekten und Lufwiederstand und Gravitation sind wie gesagt veränderbar.
Z.B. kann man auch Gravitation nach links oder oben laufen lassen. Jedes Objekt hat seine eigene Gravitation (genaugenommen Beschleunigung) welche in der Structur "a" genannt ist. Bei erstellen eines Particles wird die Beschleunigung gleich der Gravitation gesetzt. Durch änderung der Beschleunigung eines Particels kann man Beispielsweise Luftballongs (wie im testprogramm ) erstellen.

Re: Circle Physic Engine Userlib

Verfasst: 19.08.2010 21:45
von DrShrek
mpz hat geschrieben:...diese Funktionen sind in Chipmunk (version 5.3.1) gut integriert. Damit beschäftigt sich ja Dr.Shrek. Man muss "nur" den Code in PB umsetzen.
Stimmt. "Nur" brauchts auch Zeit...und Zeit ist grad mal wieder nicht über.

Re: Circle Physic Engine Userlib

Verfasst: 26.08.2010 11:03
von STARGÅTE
So von mir nun erst mal die Übersetzung des Codes von Array zu LinkedList ...
Spart ein paar Prozeduren und ist an der einen oder anderen stellen auch schneller.

CircleVerletPhysics.rar

Re: Circle Physic Engine Userlib

Verfasst: 12.05.2011 04:40
von oh... well?!
weiß nich ob der Threat noch mit Interesse verfolgt wird.

hier mal nen Update :
http://www.xup.in/dl,82663857/CircleVer ... cs0.1.rar/

Neues:
-Die Geschwindikeit wird jetzt auch in iterrations-steps aktualisiert, somit ist es wesentlich schwerer für Körper sich gegenseitig bei hoher Geschwindigkeit zu durchdringen.
-Leitungsfähigkeit ist um ca 25% gestiegen
-Es gibt eine Freeze Procedur, welche Particlegruppen die lange untätig rumliegen freezed, also aus der Rechenschleife nimmt um Leitung einzusparen. Die Procedure selbst braucht leider auch ein wenig Leistung. Mann kann sie aber einfach aus der CalcStep()-Procedure auskommentiern falls sie nicht benötigt wird.

Was ich vor habe:
-eine Particle-Constraint-Collision. Dammit könnten dann auch Rigid-Bodies erstellt werden

jo, das wars. Testprogramm wurde auch aktualisiert.
Würd mich natürlich freuen wenn das Script mal ein nem kleinen Spiel eingebunden werden würde.

Re: Circle Physic Engine Userlib

Verfasst: 12.05.2011 16:38
von c4s
Da hast du wohl etwas falsches hochgeladen. Beim Versuch zu kompilieren erscheinen mehrere Fehlermeldungen...

Re: Circle Physic Engine Userlib

Verfasst: 12.05.2011 21:32
von oh... well?!
Oh, hast wohl recht. Hatte "CircleVerletPhysics.pbi" mit der alten "CircleVerletPhysics.pb" verwechselt.
Hab neu hoch geladen und den Link aktualisiert, jetzt müsste es gehen.

Re: Circle Physic Engine Userlib

Verfasst: 13.05.2011 09:51
von c4s
Wenn ich per mittlerer Maustaste sehr viele "Tropfen" erstelle - einfach für 2-3 Sek. an einer Stelle gedrückt lassen - bekomme ich einen IMA in der Include an Zeile 466 (If Constraint()\p1\group\id<>Constraint()\p2\group\id).

Und vielleicht könnte man es noch dahingehend optimieren, dass sehr kleine "weitergereichte Impulse" einfach ignoriert werden?

Re: Circle Physic Engine Userlib

Verfasst: 13.05.2011 11:01
von oh... well?!
Zu deiner Optimierungsidee (wenn ich sie richtig verstanden habe) :
Es würde für mich nich sehr viel Sinn ergeben, da die eigentliche Rechnerleistung bei der Kollisionsüberprüfung gebraucht wird. Hab ich also schon herrausgefunden das ein kleiner Impulsaustausch stattfinden müsste, ist die Rechnerleistung diesen auch durchzuführen praktisch gleich 0. Außerdem könnte eine Außerachtlassung kleiner Impulse dazuführen dass die Particel "zittern" würden, also nur noch große Bewegungen machen und das System nicht mehr zum Stillstand kommt. Das passiert dann auch gerne bei großen gestapelten Particle-Mengen ("stacking"). Trotzdem danke für deine Idee .

Den Error bekomm ich auch. Hab bis jetzt nur absolut keine Ahnung warum, weil es für mich keinen Sinn macht. Also irgendwie liegt der Fehler in der GroupParticle() Procedure. Vielleicht stimmt was mit der Logik einfach nich... wär erfreut wenn ihr da helfen könntet.
zum Erklären:

Die Procedure GroupParticle() soll einfach nur die Particle gruppieren.
Das geschieht wie folgt:
1. Alle Gruppen des letzten Frames werden gelöscht, vorrausgesetzt die Gruppe ist nicht "gefreezed" worden.
2. Für alle Particle die nun keine Gruppe besitzten wird eine neue Gruppe erstellt
3. Aus den Daten der CollisionsRemark() Liste (dort sind alle Kollisionen (oder fast Kollisionen) der aktuellen Kollisionsrutine gespeichert) werden die Particlegruppen zusammengeführt, welche sich berrühren oder sich sehr nahe sind.
4. nun werden alle Gruppen zusammengeführt, die mit Constraints verbunden sind.

Die Gruppierung wird für die Freeze() Procedure benötigt, da man Particel, die miteinander interargieren nur als Gruppe freezen kann.

Wenn jemand ne bessere/einfachere/leistungsfähigere Idee hat kann er sie gerne mitteilen. Aber was bei dem was ich so gelesen hab wird das etwa so auch in anderen Physik-Engines gemacht.