Überlappung zweier Objekte feststellen



  • Hallo zusammen,

    eine neue Frage:

    Ich habe mehrere quad-Objekte auf dem Bildschirm (und in einer Liste). Nun habe ich ein weiteres "Mauszeiger"-Objekt, was per Tastatur bewegt wird.

    Wie könnte man jetzt feststellen, ob das Mauszeiger-Objekt sich über einem der quads befindet?

    Gruß
    Alex



  • Schnittpunkt von Quad und dem Strahl von Kamera ueber Mauszeigerspitze berechnen.
    Warum bewegt man den Mauspfeil mit der Tastatur?



  • OpenGL bietet picking Funktionalität: http://www.lighthouse3d.com/opengl/picking/



  • Im Endeffekt ist das Mauszeigerobjekt, was ich zeichne, ein eigener Mauszeiger. Später wird dieser per Infrarotstrahl bewegt, im Moment ist nur die Bewegungsschnittstelle implementiert, deswegen bewege ich diesen nur über Tastatur.

    Picking fällt daher aus, da ich ja eine Kollision von 2 OpenGL Objekten feststellen will...



  • da ich ja eine Kollision von 2 OpenGL Objekten feststellen will

    Ich habe Dich so verstanden, dass der Mauspfeil (aus der Sicht der Kamera) lediglich *vor* dem Objekt sein muss - also gar keine Kollision stattfindet.
    Darueber hinaus kannst Du die Zeigerspitze einfach in Bildschirmkoordinaten transformieren und herkoemmliche Ansaetze verfolgen (vgl. hier).



  • Ich wollte es nun mit Bounding Boxes lösen, aber ich habe nicht viel darüber gefunden, wo es konkret erklärt wird. Vielleicht könnte mir jemand zeigen, wie ich um einen vorhandenen square eine Bounding Box zeichnen kann und die Koordinaten abfragen kann.

    Alex



  • wie ich um einen vorhandenen square eine Bounding Box zeichnen kann

    Zur Erklaerung: Eine Bounding-Box ist jene Box die Dein Objekt komplett enthaelt
    (und idealer Weise so rotiert ist, dass ihr Volumen minimal ist).

    Zwei Seiten dieser Box entsprechen genau Deinem Rechteck (einmal nach 'vorne' und einmal nach 'hinten' orientiert), alle weiteren Flaechen haben eine Kantenlaenge von 0 da Dein Rechteck nunmal keine Tiefe besitzt.

    Warum glaubst Du, dass es sinnvoll sei, redundante Daten zu erzeugen?



  • Ja klar, du hast natürlich Recht. Ich kann doch einfach die glTranslatef Werte der Objekte einfach miteinander vergleichen und dort die Kollisionen prüfen. Keine Ahnung warum ich da nicht drauf gekommen bin.

    Aber nun ist mir nicht ganz klar, wozu dann die Bounding-Boxen überhaupt eingeführt werden. Warum arbeitet man nicht mit den Koordinaten einzelner Objekte?

    Alex



  • wozu dann die Bounding-Boxen überhaupt eingeführt werden. Warum arbeitet man nicht mit den Koordinaten einzelner Objekte?

    Weil ein komplexes Objekt schon mal etliche tausend Koordinaten haben kann.
    Bevor man die alle anfasst, kann Dir Bounding-Box Auskunft darueber geben, ob das Objekt ueberhaupt in der Naehe des Geschehens ist.



  • OK, das macht Sinn


Anmelden zum Antworten