Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.02.2012, 10:35

Kollisionserkennung trotz Rotation?

Hallo,

Mein Problem wie man vom Titel unschwer entnehmen kann ist die Kollisionserkennung trotz
Rotation, nur muss ich dazu noch sagen, das ich dieses Problem eig. schon gelöst habe
indem ich die Pixel Perfect Methode angewandt habe...

Trotzdem, interessieren mich mehrere Sachen bzw. habe ich noch das ein oder
andere Problem. Das fängt bei der Tatsache an das ich diesen großen Performance Verlust
bei hunderten von Objekten nicht ertragen kann und endet dabei das ich es nicht hinbekomme
über den Pixel Perfect Test zu überprüfen auf welcher Seite eines rotierten Objektes die Kollision stattfand,
also ob das rotierte Objekt oben mit dem anderen Objekt kollidiert oder von rechts usw.

Sobald ich versuche zu überprüfen ob es eine Kollision von oben gab laggt das ganze wie Sau...
Deswegen dieser Thread hier, ich will jetzt endlich verstehen was eigentlich bei der Rotation
eines Sprites vorgeht und wie ich mit diesem Wissen eine Kollisionserkennung am besten aabb
trotz Rotation bewerkstelligen kann...

Ich habe zumindest durch logisches Verständnis und längerem überlegen verstanden
warum bei einer einfachen Kollisionserkennung (die keine Rotation beachtet), trotz Rotation
des anderen Sprites an der selben stelle wo das Sprite ohne Rotation
sein würde eine Kollision erkannt wird...

Das liegt nämlich dadran das die X und Y Position die gleiche bleibt und
die lokalen Achsen immer noch in die selbe richtung zeigen, als wäre
keine Rotation vorhanden... Dann habe ich überlegt wie man diese Achsen
sozusagen auch rotieren könnte... aber da kam ich nicht mehr weiter..

Es wäre schön wenn mir das jemand ganz simpel erklärt, mich schrecken leider
große Formeln schnell ab (traumatische Erlebnisse bei oobb sag ich nur), besser wäre
es wenn man mir es ohne Formeln erklärt, ich denke mal solange es nicht zu komplex
ist, kann ich die "Formeln" auch mit Logik selber erschließen... (hoffe ich jedenfalls :P )

Zur Information: Ich benutze SFML und arbeite im 2D Bereich :P

Noch zwei Bilder zur verdeutlichung des Problems:


(Link)



(Link)


Mit freundlichen grüßen Jack

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

20.02.2012, 10:42

"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

20.02.2012, 10:51

du könntest ggf. auch die in unserem Wiki beschriebene Kollision zwischen zwei Strecken dafür verwenden

Edit:
jenachdem, was du genau vor hast, könntest du auch Box2D verwenden, damit du die Physik (und Kollisionsprüfung) nicht selbst implementieren musst
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

20.02.2012, 11:45

Transformier die Koordinaten der einen Box in das lokale Koordinatensystem der anderen und führ deine Berechnungen jeweils in den lokalen Systemen durch.

Du kennst die Richtungen der lokalen Achsen beider Boxen, sowie die Position der Boxen. Bau dir daraus für jede Box eine Matrix die vom lokalen ins globale Koordinatensystem transformiert.
Dann gibt dir das Produkt der Inversen von Matrix A mit Matrix B eine Matrix, die vom lokalen Koordinatensystem B ins lokale Koordinatensystem A transformiert.

Werbeanzeige