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

05.01.2008, 22:39

Kollisionsauflösung

Hallo,
ich bin neu hier und hoffe ich hab das richtige Forum erwischt.

Also, ich brauche ein paar Ideen zu Kollisionsauflösung und eine Beurteilung meiner Idee zur Kollisionserkennung. Das ganze für einen 3D Egoshooter in OpenGL.

Kollisionserkennung:
Meine Kamera ist ein Punkt. Meine Map besteht nur aus Dreiecken. Ich berechne für jedes Dreieck die kürzeste distanz zu meiner Kamera. Ist die kürzeste distanz kleiner als der minimale Abstand, der vorher definiert wurde dann folgt die Kollisionsauflösung.

Kollisionsauflösung:
Tritt eine Kollision auf dann bewege ich die Kamera anhand des Normalvektors wieder aus dem Dreieck heraus.

Quellcode

1
2
3
TmpVek.x = Mdl( i_mdl ).ModelPln( i_pln ).nrm.x * ( MinDst - Distance ) 
TmpVek.y = Mdl( i_mdl ).ModelPln( i_pln ).nrm.y * ( MinDst - Distance ) 
TmpVek.z = Mdl( i_mdl ).ModelPln( i_pln ).nrm.z * ( MinDst - Distance )


Probleme:
-Sobald man eine Schräge hochlaufen möchte die steiler als 20° ist geht es nicht mehr, weil man so stark zurück bewegt wird das man einfach nicht hoch kommt.
-Oft kommt es zu schwierigkeiten wenn man mit zwei Objekten gleichzeitig in Kontakt kommt da das Objekt welches zuletzt getestet wird
immer vorrangig ist und man oft aus der Karte oder einem Raum herraus geschoben wird.

Ich hoffe mir kann einer Helfen wenn noch etwas unklar ist einfach fragen ;)

MFG Thorben

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

2

06.01.2008, 17:39

bei schrägen die Kamera parallel ausrichten zum feststellen der Kollision? :o

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

06.01.2008, 23:03

Mach es nach dem Reflextionsgesetz, dann funktioniert es auch ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

4

08.01.2008, 03:18

@Beneroth
ich verstehe nicht genau wie du das meinst.

@Black-Panther
Meinst du Einfallswinkel gleich Ausfallswinkel usw.?
Würde es nicht auf das selbe heraus kommen oder bezieht sich deine Antwort auch nur auf das Problem mit den Schrägen?

MFG Thorben

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

5

08.01.2008, 11:24

Ich meinte jetzt das Problem mit der Schrägen! Hab irgendwie das andere überlesen ;) :roll:

Was das andere betrifft, müsstest du im Optimalfall ein LCP lösen, was leider aber nicht so einfach ist (google mal nach Lemke-Howsson Algorithmus)! Sonst könntest du dir überlegen, was wäre, wenn du nur eine begrenzte Anzahl von Kollisionspunkten berücksichtigst (Also eine obere Grenze definierst), und ob du dann das Problem lösen kannst!

Ansonsten, wenn sich deine Kollisionserkennung immer nur auf eine Linie bezieht (achja, Kamerakollisionen handhabt man normalerweise als Linienkollisionen mit Startpunkt = Position der Kamera des letzten Frames und Endpunkt = aktuelle Kameraposition), dann solltest du dir immer nur die erste Kollision anschauen, und bevor du sie auflöst, die aufgelöste Position als neuen Endpunkt einer Linie, startend vom Kollisionspunkt, erneut auf Kollision überprüfen. Falls die Auflösung wieder kollidiert, handhabst du diese wie die erste Kollision, und fährst rekursiv fort. Ansonsten ist die aufgelöste Position deine neue Kameraposition!
Die Asympthotische Komplexität steigt dadurch nicht, es gibt lediglich mehrere Kollisionsabfragen bei multiplen Kontaktpunkten (zB in Ecken). Dafür wird alles richtig ausgewertet. Overhead ist dadurch ebenfalls minimal (viel besser als LCP!)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

6

09.01.2008, 15:14

Gut danke. Ich probiers erstmal aus, wenn es Schwierigkeiten gibt dann melde ich mich wieder.

MFG Thorben

7

09.01.2008, 21:28

Ok ich hab das ganze jetzt am auf die "normale Kamerakollisionen" umgebaut. Jetzt hab ich aber keine Idee wie ich die Kollision wieder auflöse. Könntest du das noch einaml genauer ausführen?

z.B. Wie bekomm ich die Abstoßrichtung.

MFG Thorben

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

8

09.01.2008, 22:11

v = Einfallsvektor
v' = Ausfallsvektor
N = Normalvektor der Fläche, mit der du kollidierst
N_ = Vektor senkrecht zu N, also tangential zur Ebene
. = Skalarprodukt
* = Produkt Vektor mit einem Skalar

v' = N_ * (N_ . v) - N * (N . v)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige