Kollision berechnen ...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

JPD

Betreff: Kollision berechnen ...

BeitragSo, Jul 13, 2008 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich weiß dass dieses Thema schon oft besprochen wurde, aber ich komme einfach nicht weiter.

Wie bekomme ich das Fahrgefühl eines Scooters auf Eis hin oder so ähnlich als ob das Teil schwebt und an den Wänden eben im richtigen Winkel abprallt. Meine Strecke besteht auf einem einzigen Mesh.

Kann mir hier jemand Tipps geben wie man so etwas umsetzt und berechnen kann? Code gibts außer dem Laden des Levels noch keinen, da ich im Moment noch keine Vorstellung zur Umsetzung habe. Ich habe schon einiges probiert. Beschleunigung ausrechnen und vieles mehr, doch das Problem mit dem Abprallwinkel am Mesh bleibt Sad

Grüße Jan

PS: Habe meinen Scooter eben einer Sphere zugewiesen, die dann eben mit dem Mesh kollidiert (Modus 2). Ich sehe auch bei der Beschleunigung beim Aufprall einen hohen Spitzenwert, aber ich kann die Winkel usw nicht berechnen ... wie macht man das?

draco

BeitragFr, Aug 08, 2008 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde sagen, eine Physik Engine kann das. Such mal nach Newton Game Dynamics oder Physik Engine...
Die einzige Möglichkeit, etwas vom Leben zu haben, ist, sich mit aller Macht hineinzustürzen...
 

Darren

BeitragSa, Aug 09, 2008 2:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Abprallwinkel?

Das kann doch nicht so schwer sein. Hab das zwar noch nie programmiert, ist aber doch nur ein bisschen Vektormathe.

Was du brauchst, ist die Bewegungsrichtung deines Fahrzeugs und den normalenvektor des Polygons auf das du draufhämmerst. Mit diesen beiden werten kannst du bei einer kollision den aufprallwinkel berechnen und mit dem dann auch in welchem winkel dein gefährt weiterschießt. Am besten du machst dir dazu einige zeichnungen, schreibst rein, was du hast und was du willst und hackst das dann einfach rein.

so mach ich das meistens und klappt eigentlich immer.
MFG Darren

StepTiger

BeitragSa, Aug 09, 2008 4:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Bewegungsvektor am Normalenvektor spiegeln.
____
\ | /
\ | /
\|/
----

Mitte=Normale
Links=projezierterAusgansvektor
Rechts=Reflektierter Vektor

Der neue Abstand entspricht dem doppelten Abstand zwischen auf Normale projezierten und Ausgangsvektor. Klingt kompliziert, ist aber relativ leicht sobald man es ein mal verstanden hat Wink

Sofern du eine viereckige Grundfläche hast, ist das verdammt einfach. (Linke&Rechte Wand=Kollision nur auf der X-Achse, Obere und unter nur auf der Z-Achse)

Solltest du allerdings echte Physik in Betracht ziehen, wirst du wohl oder übel nicht am Rechnen vorbeikommen Wink
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

JPD

BeitragSa, Aug 09, 2008 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, soweit habe ich mir das auch schon überlegt, nur bekomme ich im Moment noch keinen Überblick über das Ganze ...

Nein, ich glaube nicht dass dafür eine Physikengine gebraucht wird. Ich habe mir auch schon überlegt, ob ich ganz einfach die Geschwindigkeit bei einem Aufprall einfach Umkehre, aber das brachte nicht den gewünschten Erfolg, da das Fahrzeug dann einfach Rückwärts von der Wand weg fuhr ... und nicht selten klebte es dann einfach fest.

Ich werds mal mit der Methode von StepTiger probieren und melde mich wieder ...

Grüße Jan

JPD

BeitragDo, Okt 23, 2008 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So,

nun habe ich mal wieder rangesetzt und bin mal ernsthaft Winkelfunktionen und Kollision in 2D durchgegangen. Also es ist wirklich sehr sehr einfach über Sinus und Cosinus eine Richtung zu bestimmen, oder den Abprallwinkel, - jetzt kommts - wenn man den Winkel der Wand weiß, auf die das Objekt aufprallt.

Ich habe jetzt echt zu lange rumprobiert. Selbst über den Pythagoras (Abstand Fahrzeug - Wand) und den dadurch berechneten VectorYaw (macht keinen Sinn, da es ja nichts mit dem Winkel zur Wand zu tun hat) usw bekomme ich keine sinnvollen Winkelangaben. Die taumeln immer zwischen 0 und -45 ...

Ich habe im Moment die Position X und Z meines Fahrzeuges. Ich habe den Winkel und sogar den Abstand zur Wand bei einer Kollision. Nun fehlt mir noch der Winkel der Wand (Triangle). Ich finde dazu aber keine passende Möglichkeit diesen zu bekommen ... vielleicht kann mir hier jemand auf die Sprünge helfen Wink

MfG Jan

Nachtrag: Gerade habe ich bemerkt. Dass sich der Winkel über VectorYaw auf den Punk 0/0/0 meiner Landschaft bezieht. Deshalb bekomme ich immer Werte die gleichen Werte.

Lösungsansatz zum ermitteln des Wandwinkels: Jede Wand besteht aus 2 Triangeln. Jede Triangel aus 3 Vertexpunkten. Zweier dieser Vertexpunkte müssen!!! auf der gleichen Y-Ebene liegen. Prüft man das nach bekommt man 2 Punkte in der Landschaft. Durch errechnen von deltaX und deltaY dieser beiden Punkte kann über ArcosTangens der Winkel berechnet werden. Das funktioniert prima und liefert nun sinnvolle Werte von 33, 45 oder gar 90 Grad:

Also im Fall y1 = y2 würde man rechnen:
Code: [AUSKLAPPEN]

deltaX# = Vertex1X# - Vertex2X#
deltaZ# = Vertex1Z# - Vertex2Z#
winkel# = ATan(deltaX# / deltaY#)


endgültige Lösung mit Abprallwinkel folgt ...

JPD

BeitragDo, Okt 23, 2008 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich gebs ehrlich gesagt auf ... ich bekomme zwar die Abprallwinkel hin, aber dann entsteht das nächste Problem usw ...

Habe erst vor einigen Tagen die Devil-Physiks-Engine ausprobiert und bin davon positiv überrascht. Gibt es zu der Engine irgendwo eine gute Dokumentation? Zum Beispiel fängt es schon beim Mesh-Typ an, gibts außer "Cube" und "Sphere" nichts mehr und wie bewegt man sein Fahrzeug ...

Bzw ... gibts ne Alternative zur Devil ODE ...

Grüße und Gute N8 Jan Wink
 

Darren

BeitragSo, Okt 26, 2008 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit dem abprallwinkel:

wenn zwei Objekte Collidieren kannst du doch die Flächennormale des Polygons bestimmen, auf das beispielsweise dein auto aufknallt. der weiteren brauchst du noch die bewegungsrichtung der autos im moment des aufpralls, also kurz davor bevor die verzögerungskräfte wirken. mit diesen beiden vektoren kannst du eine ebene aufspannen, deren aufpunkt beispielsweise der kollisionspunkt ist. der eine richtungsvektor zum aufspannen ist die normale des polygons, der andere ist die bewegungsrichtung.
jetzt kannst du in dieser ebene den richtungsvektor der bewegungsrichtung an der normale spiegeln, um den abprallwinkel zu erhalten.

das ist der analytische weg, doch bestimmt gibt es einen viel einfacheren. schließlich gibt es bei den vektoren immer sehr hilfreiche beziehungen bezüglich kreuzprodukt/skalarprodukt und so weiter.

soweit ich weiß, kann man auch mittels matrizen spiegelungen von vektoren vollziehen. weiß aber nicht, wie das geht xD
MFG Darren

JPD

BeitragSo, Okt 26, 2008 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau so hätte ich das auch gemacht. Nur habe ich Probleme an den Winkel der Normalen zu kommen Ist das ein undokumentiertes Feature? Ich bin den umstädlichen Weg gegangen über die beiden Vertex-Punkte den Winkel der Wand zu berechnen. Das klappt auch ganz gut, allerdings ist der Winkel für / und \ gleich 45 Grad und somit kann ich nicht unterscheiden, ob es diese / Wand ist oder diese \. Geht schon, aber total umständlich.

Ich bin aber soweit gekommen. Ich pralle mit meinem Fahrzeug auf eine Wand, sagen wir 45 Grad, mein Fahrzeug prallt mit 30 Grad dagegen. Ich bekomme dann einen Winkel von -15 oder 15 heraus, jeh nach dem ob ich von oben oder unten gegen die Wand stoße.

Wie bekomme ich den Winkel der Normalen?! VertexYaw bezieht sich ja auf den Vertex und das auch noch gegen den Nullpunkt ...

Grüße Jan
 

Darren

BeitragSo, Okt 26, 2008 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Die normale hat keinen Winkel. wie denn auch? winkel gibt es nur zwischen zwei geraden! das heißt deinen winkel bekommst du nur zwischen dem vektor der bewegungsrichtung und der normale des polygons an das du ranknallst. die drei komponenten der kollisionsnormale bekommst du mit CollisionNX/NY/NZ. den vektor deines autos musst du selbst berechnen, der setzt sich einfach aus den drei geschwindigkeiten in X/Y und Z-richtung zusammen.
MFG Darren

JPD

BeitragSo, Okt 26, 2008 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, ich werd mich - wenn ich Zeit finde - nochmals ausführlich damit beschäfitgen und mal ein paar Codeschnippsel einfügen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group