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

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

1

04.02.2009, 22:34

Kollision von dreiecken feststellen

Hallo

Also ich versuche mich gerade an einem 2D-Weltraum(shooter).
Dabei geht es natürlich darum mit nem Raumschiff rumzufliegen und
sachen abzuknallen...

Als nächstes muss ich mich jetzt um die Kollision kümmern.
Dazu habe ich mir gedacht, dass jedes Raumschiff zusätzlich zu
seiner Bilddatei, noch ein Kollisionsmodell aus Dreiecken bekommt.

Wenn dann zwei Raumschiffe nahe aneinander sind, sollen diese
Dreiecke getestet werden.
Das hat den Vorteil, dass es recht schnell und (hoffentlich) einfach geht.
Und Pixelgenaue Kollision habe ich nicht nötig :)

Meine Frage ist jetzt, wie ich zwei Dreiecke auf Kollision testen kann.
Hab schon ein bisl gesucht.. finde aber immer nur beispiele für den
3Dimensionalen Raum....
Kennt da jemand einen Link ? Ich habe bisher nur das hier gefunden:
http://wiki.delphigl.com/index.php/Tutor…ng_Axis_Theorem
Das ist allgemein für konvexe Polygone, zu dennen Dreiecke ja auch gehören.
Aber ich wollte jetzt nochmal fragen, ob es vtl noch bessere also schnellere Verfahren gibt ?
Oder würdet ihr die Kollision ganz anders
implementieren ?
Weiterhin währen noch berechnungen für Kreis<->Dreieck, Liene<->Dreieck, etc. interessant...

2

04.02.2009, 22:41

Re: Kollision von dreiecken feststellen

Zitat von »"Databyte"«


Und Pixelgenaue Kollision habe ich nicht nötig :)


Einfach aus Prinzip oder steckt da mehr dahinter?
Also ich finde das Tutorial hier eigentlich sehr interessant:
http://newmaxim.ne.funpic.de/create_page.php?file=2d_collision.html&dir=artikel/directxcpp

Ist es vielleicht möglich, das auf deine Methode irgendwie zu übertragen?
Oder fehlen dir nur die nötigen Formeln/Algorithmen?
MfG Shiver!

„Ideen sind nur Ausgangspunkte. Um zu wissen, was man zeichnen will, muss man zu zeichnen anfangen.“ Pablo Picasso

Ibot Development - Mein Weg zum eigenen 2D RPG

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

04.02.2009, 22:46

Also naja ich finde Pixelgenaue Kollisoin daher überflüssig weil
man es meistens dann trotzdem kaum (:) ) merkt..

Aber das is gar nicht das Problem ;)


Ich will meine Objekt ja auch drehen und da is
diese PgK nich die beste Lösung ( finde ich )
Ausserdem habe ich noch ein paar andere Gründe die
das Spiel selbst betreffen... die lass ich aber erstmal geheim *oO* :)

4

04.02.2009, 22:49

Kuck mal, ob dieses PDF was für dich ist.
fka tm

5

04.02.2009, 23:51

Linie Dreieck ist sehr simpel, für die Dreieckskannten erstellst du jeweils Strahlengleichungn und setzt die Gerade mit den 3 Kanten nacheinander gleich. Dann musst du nur noch testen, ob der Schnittpunkt auf der Kannte zwischen 0 und 1 liegt (den du würdest die Kanntenstrahlenrichtungsvektoren nicht normalisieren).

Kreis Dreieck ist auch sehr effizient, wenn du nicht den genauen Schnittpunkt brauchst. Du suchst eine Verbindung von Strahl/Kugelmittelpunkt die Senkrecht auf dem Strahl steht. Ist deren Länge dann größer als der kreisradius, geht der Strahl dran vorbei.
Die Senkrecht Bedingung kriegst du mit dem Skalarprodukt, das muss dann 0 sein. Also: (Strahl - Kreisposition)xStrahlnormale=0 Gilt dann auch für 3D.

Dreieck/Dreieck, nun geht theoretisch auch indem du jeweils guckst, ob die Strahlen einen Schnittpunkt haben, könnte aber auch effizientere methoden geben.

In 2D ist der sehr große Vorteil, dass Strahlen nicht windschief sein können, was die Sache in 3D durchaus etwas komplizierter macht.
Lieber dumm fragen, als dumm bleiben!

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

6

05.02.2009, 14:23

Zitat von »"TrikkieMikkie"«

Kuck mal, ob dieses PDF was für dich ist.


Das sieht nicht schlecht aus ;)

Allerdings muss ich zugeben das ich das nich so ganz verstehe
( ka obs an dem Englisch liegt oder ka... :( )
gibts da noch ne einfachere Erklärung ;)

Außerdem is das ja auch wieder für 3D... dachte vtl
auf 2D gebe es da was noch besseres...

Anonymous

unregistriert

7

05.02.2009, 16:54

Pythagoras?

8

05.02.2009, 17:04

Zitat von »"Coders-Square"«

Pythagoras?

Hm, nein, glaub ich erst wenn du mir das genaue Verfahren zeigst.

Ich finde das mit der Strahlengleichung schon ganz gut. Halt:
Start + s * Richtung = PunktAufStrahl
Wenn du jetzt von 2 Eckpunkten des Dreiecks die Kantengleichung erstellen willst, ist Start der Erste und Richtugn (Zweiter-Erster). Alle Punkte für die s zwischen 0 und 1 sind, liegen dann auf der Kannte.

Wenn du jetzt den Schnittpunkt von 2 Gerade ausrechnen willst, muss du einfach gleichsetzen:
S1+g1*R1=S2+g2*R2
Jetzt kannst du das z.B: statt mit Vektoren mit den jeweiligen Komponenten schreiben und schon hast du 2 Gleichungen mit 2 Unbekannten, das sollte kein Problem sein.
Lieber dumm fragen, als dumm bleiben!

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

9

06.02.2009, 15:40

So hab jetzt mal das oben mit den Polygonen getestet und das gefällt mir eigentlich ganz gut
vorallem kann ich dann die Raumschiffe auch mit vierecken und so weiter
machen :D

trotzdem danke an alle

10

06.02.2009, 16:42

Zitat von »"Coders-Square"«

Pythagoras?

Lol? Wie willst du mit Pythagoras eine Kollision feststellen? :?:
MfG Shiver!

„Ideen sind nur Ausgangspunkte. Um zu wissen, was man zeichnen will, muss man zu zeichnen anfangen.“ Pablo Picasso

Ibot Development - Mein Weg zum eigenen 2D RPG

Werbeanzeige