Ich arbeite an einer Android-Anwendung, in der eine 3D-Szene angezeigt wird und der Benutzer in der Lage sein sollte, einen Bereich durch Klicken/Tippen auf den Bildschirm auszuwählen. Die Szene ist so ziemlich ein planares (Spiel) Board auf dem verschiedene Objekte platziert werden.
Jetzt ist das Problem, wie bekomme ich den angeklickten Bereich auf der Platine von den tatsächlichen Bildschirm-Raum-Koordinaten?Umgekehrte Projektionsflächenkoordinate zu Modellraumkoordinaten
Ich hatte geplant, gluUnProject()
zu verwenden, da ich Zugriff auf (fast) alle notwendigen Parameter habe. Leider fehlt mir der Parameter winZ
param, und kann nicht die aktuelle Tiefe erhalten, da das Berührungsereignis in einem anderen Thread als der GL-Thread auftritt.
Mein neuer Plan ist immer noch gluUnProject, aber mit einem winZ
von 0, und projizieren Sie den resultierenden Punkt auf die Platine (die Platine reicht von 0,0,0
bis 10,0,10
im Modellbereich), aber ich kann nicht scheinen, herauszufinden Wie macht man das?
Ich würde mich sehr freuen, wenn mir jemand mit der nötigen Mathematik helfen könnte (Matrizen waren nie meine stärkste Seite), oder vielleicht eine bessere Lösung finden.
Um zu klären; Hier ist ein Bild von dem, was ich tun möchte:
Das rote Rechteck repräsentiert den Gerätebildschirm, das grüne x ist das Berührungsereignis und das schwarze Quadrat ist das Brett (graue Unterteilungen repräsentieren ein Quadrat von einer Einheit). Ich muss herausfinden, wo auf dem Brett die Berührung passiert ist (in diesem Fall ist es in Quadrat 1,1).
Vielen Dank für Ihre Antwort, aber leider ist es nicht so einfach, die Platte zur Blickrichtung nicht senkrecht ist, so dass ein einfaches Lösung wie diese wird nicht funktionieren. Ich aktualisierte die Frage mit einer einfachen Grafik, um das Problem zu visualisieren. – Jave
Oh, und ich meinte, dass das Flugzeug/Board im MODELL-Raum beschrieben wird, nicht in der Welt (kann gerade nicht bearbeitet werden, schreibt auf ein Telefon) – Jave