3D - Kollision: Bounding Box
-
Hi, ich hoffe das gehört hierher...
Also, ich habe zwei Bounding Boxes und will jetzt prüfen ob die sich berühren...
Wie mach ich das am Besten ?
Es gibt ja noch Sonderfälle wie
eine ganz in der anderen
rotiert
Loch im ModelUND Bounding Boxes werden ja nicht beim Bewegen der Objekte (Translate) mitverschoben, oder ?
Für den letzten Sonderfall bräuchte ich andere Kollisionen, aber wie ??
Kollisionen auf Schrägen wären auch praktisch (halt wie in 3D-Spielen Treppen... hochlaufen) ^^
-
Könntest du das bitte mal mathematisch formulieren? Dann können dir auch Leute helfen, die sich nicht mit 3D Grafikprogrammierung auskennen.
-
Naja, ich habe zwei Bounding Boxes (zur einfacheren Kollision),
halt 3D-Kisten (^^) mit den Koordinaten aller Eckpunkte.Wie kann ich prüfen, ob die zwei sich berühren, oder ob eine in der anderen ist ?
Und was ist wenn sie gedreht werden ?
Und wie kann ich Kollisionen mit z.B. Prismen (für Treppen ?!) durchführen ?
-
Also mit Bounding Spheres wäre das deutlich einfacher.
Was kannst du denn schon? Weisst du wie man berechnet auf welcher Seite einer Fläche sich ein Punkt befindet?
-
-
Bounding Shperes sind Kugeln, oder ? Wäre für Treppen ungeeignet ^^
-
Nur wenn die Fläche parallel zu einer Achse ist...
Ich kann aber die Entfernung von 2 3D-Punkten bestimmen
-
-
DarkShadow44 schrieb:
Naja, ich habe zwei Bounding Boxes (zur einfacheren Kollision),
halt 3D-Kisten (^^) mit den Koordinaten aller Eckpunkte.Wie kann ich prüfen, ob die zwei sich berühren, oder ob eine in der anderen ist ?
Du könntest die Eckpunkte der ersten Kiste in das Koordinatensystem der zweiten Kiste transformieren. Wenn die zweite Kiste in ihrem Koordinatensystem zwischen (0, 0, 0) und (1, 1, 1) liegt, ist der Test ob die Eckpunkte drin sind ganz einfach.
-
Wie Bitte ?
Wie meinst du denn DAS ?
-
empgodot schrieb:
DarkShadow44 schrieb:
Naja, ich habe zwei Bounding Boxes (zur einfacheren Kollision),
halt 3D-Kisten (^^) mit den Koordinaten aller Eckpunkte.Wie kann ich prüfen, ob die zwei sich berühren, oder ob eine in der anderen ist ?
Du könntest die Eckpunkte der ersten Kiste in das Koordinatensystem der zweiten Kiste transformieren. Wenn die zweite Kiste in ihrem Koordinatensystem zwischen (0, 0, 0) und (1, 1, 1) liegt, ist der Test ob die Eckpunkte drin sind ganz einfach.
Nein, betrachte folgenden Fall:
/------------------------- /- -/| /-- / | /- -/ | +-------------------------+/ | | | --+------------------- | | / |---\ / \--- | Box 1 | / | ---\ / \--- | | o | ---\ / \-- | | | Box 2 -/-\ \--- | | | / ------------------\/-- | | |P2 / / / | | / / / / | | | / / / | | o / / / | | / / / / | | o / / / | | | / / / | | / / / / +-------------------------+/P1 / / / / / / / / / / / / / / / ---------------------- / / \--- \--- / \--- / \--- / \--- / \--- / \--- / \--- / \/-----------------\-
(P1, P2 liegen nicht in Box2). Kein Punkt einer Box liegt in der anderen Box. Dennoch schneiden sich die Boxen
-
o------------o | | | | o-----------------------o | | | | | | | | | | | | | | o-----------------------o | | | | | | o------------o
2D Entsprechung, ich bin nicht so gut wie du ^^
Aber wie kann ich dann Kollisionen überprüfen ?
-
Du kannst versuchen zu berechnen, ob es eine Fläche einen Spats(Würfel, Quaders) gibt, der von einer Kante des anderen Spats geschnitten wird. (Ein Hoch auf die Vektorrechnung
)
Zurvor würde ich jedoch aber noch die
- Summe der Außerradien (=> Ist es möglich, dass eine Kollision stattfinden kann? => Wenn nein, dann keine Kollision möglich) und
- die Summe der Innenradien (=> Wann ja, Kollision ist garantiert vorhanden)
mit dem Abstand vergleichen.
Außerdem kann man es auf bis zu 9 Vergleiche optimieren. (Nur die zugewandten Kanten und Flächen berücksichtigen)
-
Du kannst versuchen zu berechnen, ob es eine Fläche einen Spats(Würfel, Quaders) gibt, der von einer Kante des anderen Spats geschnitten wird. (Ein Hoch auf die Vektorrechnung
)
Aha... Und wie macht man so was ?
Wie berechne ich Innen und Außenradius am Besten bei Polygonen ??
-
Da es Quader sind geht es ziemlich einfach.
Innenradius: Die Länge der kürzesten Kante (also Breite, Höhe oder Länge) * 0.5
Außenradius: Die Wurzel aus der Summe der Quadrate von Breite, Höhe und Länge
-
Rhombicosidodecahedron schrieb:
die Summe der Innenradien (=> Wann ja, Kollision ist garantiert vorhanden)
Je nachdem in welchem Kontext die Kollision geprüft wird, könnte das die Laufzeit auch verlängern. Z.b. bei langsam bewegenden Kisten wird meistens eine Eck-Kollision stattfinden.