Du bist nicht angemeldet.

Werbeanzeige

1

22.06.2017, 13:25

Optimierung der Funktion tbBoxHitsBox

Hallo,

ich habe mich gerade mit der Kollisionserkennung zwischen zwei Quadern auseinandergesetzt. Dabei ist mir aufgefallen, dass man das doch einfacher lösen könnte, als mit den zusätzlichen Punkten.
Meine Idde wäre gewesen:
1.) Überprüfen, ob die Eckpunkte des Quaders A im Quader B liegen.
2.) Wenn das nicht so ist, prüfen, ob die Eckpunkte des Quaders B im Quader A liegen.
3.) Wenn das auch nicht so ist, überprüft man, ob irgendeine Kante des Quaders A im Quader B liegt (Dazu müsste man eine schenllere Version von tbLineHitsBoxprogrammieren, da man die Schnittpunkte nicht berechnen muss, und da die Ebenen schon berechnet wurden)

Ich glaube, dass ist schneller, als mit vielen Punkten zu arbeiten (ob es schneller ist als tbBosHitsBox2 weiß ich nicht), außerdem liefert meine Methode zu 100% ein korrektes Ergebnis.

Grüße,
Patrick
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

David Scherfgen

Administrator

Beiträge: 10 297

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

22.06.2017, 13:40

Ja, die Methode mit den vielen Punkten ist totaler Quatsch, aber es gibt doch noch eine andere Funktion in der Engine, die das besser und 100% korrekt löst.

3

22.06.2017, 14:06

Jetzt ist die Frage, ob meine oder tbBoxHitsBox2 effizienter ist.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

David Scherfgen

Administrator

Beiträge: 10 297

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

22.06.2017, 14:17

Und die Frage, ob du überhaupt einen Unterschied bemerken würdest! Wahrscheinlich nur, wenn du extrem viele Tests durchführst (Millionen pro Frame).

5

22.06.2017, 14:24

Aber jede Millisekunde ist wertvoll (bei einem Spiel wie GTA würde es sich schon bemerkbar machen)
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Schorsch

Supermoderator

Beiträge: 5 198

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

6

22.06.2017, 14:29

Du kannst ja die Laufzeit beider Algorithmen bestimmen. Zusätzlich kannst du halt Tests schreiben bei welchen die Algorithmen jeweils zig mal ausgeführt werden.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

7

22.06.2017, 14:51

Das werde ich demnächst machen.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

@zimmer

Alter Hase

Beiträge: 1 150

Wohnort: NRW Germany

  • Private Nachricht senden

8

05.08.2017, 23:41

Vielleicht mache ich auch mal meine eigenen Kollision.

kann die von Patrick Z. beschriebene Technik habe ich nicht komplett nachvollziehen können.
z.B. das

Zitat

da man die Schnittpunkte nicht berechnen muss, und da die Ebenen schon berechnet wurden)


Und wie errechnet man wenn ein Vertex eines Objektes in eine ungleichmäßige form eintaucht?
und würde es nicht auch reichen wenn man ermittelt ob eine Seite in ein Dreieck eines anderen Objecte eindringt?



Ich habe mir gedacht wenn man ermitteln kann ob sich 2 Strecken(AB und CD) sich schneiden dann könnte man vielleicht auch die Formel auf 3d erweitern um zu prüfen ob eine Strecke ein Dreieck schneidet.

Ist das Richtig ? Gibt es eine Formel?

und Wenn Objekte sich im Game bewegen dann sind die Bewegungen ja nicht analog wie in der Echten Welt, die Objekte bewegen sich in Schritten.
Bei Schnellen Spielen kann es auch mal passieren dass, man in einer Oberfläche steckt und die Vertex-es nicht im Würfel sondern durch das Objekt gehen, z.B. bei Lanzen die durch eine Wand gehen.

Das Beschäftigt mich für ein Game Project mit dem 3dGameStudio bei dem ich sehr oft unzufrieden mit der Kollision war, es ist nicht sehr wichtig und ich könnte auch die vorhandenen Kollision Engine Nutzen und ich brauche das erst in einigen Monaten aber vielleicht ist es ja einfacher als ich dachte, deshalb würde ich mich über ein Paar Infos frehen.

9

07.08.2017, 12:50

Zu deinem Problem würde ich einen neuen Thread öffnen.

Und ich glaube du hast etwas falsch verstanden: Hier geht es nur um die Funktion tbBoxHitxBox (als "Quader kollidiert mit Quader") und deshalb sind die Objekte immer Quader (meistens Umgebungsquader).

Wenn dein zweiter Absatz:

Zitat

Und wie errechnet man wenn ein Vertex eines Objektes in eine ungleichmäßige form eintaucht?
und würde es nicht auch reichen wenn man ermittelt ob eine Seite in ein Dreieck eines anderen Objecte eindringt?

nichts mit dem Anfang zu tun hat, ist hier die Erklärung zu dem, was du nicht verstehst:
"In tbLineHitsBox werden ja zuerst die Ebenen der Box berechnet. Das braucht man aber nicht mehr machen, da das schon am Anfang in tbBoxHitsBox geschieht. Und der Schnittpunkt, der in tbLineHitsBox berechnet wird, wird auch nicht benötigt, da es nur wichtig ist, ob sie kollidieren und nicht wo (das wäre bei einem Quader oder einem allgemeinem 3D-Objekt sowieso immer ein Polygon und würde wenig bringen.)"

Aber ich habe vor eine eigene Physik-Engine zu schreiben, welche zum Rendern und für die Physik unterschiedliche Objekte verwendet und auch soweit wie möglich die Objekte in geometrische Körper umwandelt, da z.B. eine Kollision zwischen einer Kugel und einem Quader viel leichter berrechnet werden kann, als eine Kollision zwischen zwei Objekten mit vielen Dreiecken.
Ich habe auch vor, die ganze TrieBase generalzuüberholen.

Ich schreibe gerade ein Konzept und werbe dann für Helfer.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Werbeanzeige