Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 21, 2019 03:01

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kollisions-Erkennung wie verwaltet?
BeitragVerfasst: Sa Mär 16, 2019 00:46 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 915
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Hi,

ich wende mich gerade dem Themen bereich zu, vor dem ich mich immer gedrückt habe: Collision Detection. Und mir geht es jetzt nicht um die Frage, wie minimiere ich die Anzahl der zu prüfenden Polygone. Auch nicht um die mathematische Themen, sondern eher um die Frage danach, wie man das eigentlich am besten verwaltet, was die Level-Geometry angeht.

Für die Außenwelt denke ich, wird ja erstmal ein Terrain-Collision-Decetion-Algorithmus verwedet (was Boden ist, ist ja klar definiert), die Objekte in der Welt (Bäume, Zäune, Schilder, Was-Auch-Immer) dann vermutlich mit Axis-Aligned Bounding Boxen. Und dann ggf. im Detail auf die Polygone, wenn notwendig. Richtig?

Wie aber sieht das bei aus, wenn man z. B. ein Dungeon betritt. Wird da auch der Boden für Terrain-Collision verwendet und die Wände auf Polygon-Ebene geprüft? Aber wann ist eine Wand dann eine Wand? Aber 45°, ab 70° Winkel zum Boden? Oder wird da eine andere Art der Kollision-Erkennung verwendet? Und wenn ich in der Außenwelt ein Haus betrete, was wird dann dort verwendet. Gibt es ein allgemeines vorgehen, dass so ziemlich alles abdeckt? Oder werden in den Level-Editoren der Game-Engines für jede Wand, jeden Boden, etc. extra Informationen für die Kollosionserkennung übergeben?

Irgendwie hab ich mich bei meinen Überlegungen gedanklich etwas verlaufen, wäre nett, wenn ihr mir helfen könntet. Was ist da die beste Lösung?

Gruß
Marc

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 16, 2019 15:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 570
Programmiersprache: C++
Auf jeden Fall musst du irgendeine Art von Raumunterteilungsverfahren einsetzen (z. B. Octrees), um die Anzahl der zu testenden Kollisionen zu reduzieren. Darüber hinaus hängt es wohl auch von der Beschaffenheit der Welt ab, was sich am ehesten anbietet. Ist die Welt komplett statisch, kannst du im Prinzip einen Octree nehmen und in seinen Blättern die Referenzen zu den entsprechenden Dreiecken hinterlegen. So könntest du vermutlich relativ effizient Kollisionstests auf Dreiecksebene durchführen.

Wenn es Objekte gibt, die sich verformen oder ihren Standort ändern, ist dieser Ansatz ungeeignet, weil man den Baum ständig neu bauen bzw. umbauen müsste. Dann sollte man sich außerdem noch die Frage stellen, ob man dreiecksgenaue Kollisionserkennung überhaupt will, oder ob z. B. Kugeln und Zylinder in manchen Fällen die bessere (und weniger rechenintensive) Annäherung an eine Form sind als Dreiecke. Ich muss sagen, dass ich für mich auch noch keine in der Praxis zufriedenstellende Lösung gefunden habe.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.023s | 17 Queries | GZIP : On ]