2016-04-20 4 views
1

Es ist sogar in dem Dokument geschrieben, dass Camera.unproject() davon ausgeht, dass der Bildschirm hat es in der oberen linken Ecke, auf der anderen Seite Camera.project() geht davon aus, dass der Bildschirm seinen Ursprung in der unteren linken Ecke hat. Das ist so nervig. Ist das beabsichtigt? Bekomme ich nichts?Warum werden Camera.unproject() und Camera.project() in libGdx nicht umgekehrt?

 tmp3.x = selected.pos.x; 
     tmp3.y = selected.pos.y; 
     camera.unproject(tmp3); 
     camera.project(tmp3); 

Dies dreht den Vektor, wo es den gleichen Vektor zurückgeben sollte.

EDIT:
Zuerst versuchte ich Viewport.project() und Viewport.unproject() zu verwenden, um Punkte von einem Ansichtsfenster in ein anderes zu konvertieren (ein Kontextmenü über ein Spielelement zu positionieren) .Sie auch diese Namens Verwirrung erben, und es ist nicht einmal erwähnt in den Javadocs dort.

PS. Ich mag LibGdx wirklich. Ich habe das gerade geschrieben, um vielleicht in Zukunft jemandem Kopfschmerzen zu ersparen, da ich dies nirgends im Internet direkt gefunden habe.

Antwort

0

Der Javadoc für die Projektmethode erklärt warum. Ich denke, die Annahme ist, dass der häufigste Grund, einen Punkt zu projizieren, darin besteht, etwas mit der UI auszurichten, die auch Y-up sein wird. Aber wenn ich projiziere, ist es am wahrscheinlichsten, eine Berührungskoordinate in Weltkoordinaten zu konvertieren.

Oder anders gesagt, alles, was Sie in OpenGL machen, ist Y-up, also ist alles darauf ausgerichtet, Y-up zu sein oder Sie dorthin zu bringen.

Nicht zu sagen, das ist unbedingt der beste Weg; Ich versuche nur, den Denkprozess zu erraten. Es wäre wahrscheinlich nicht schaden, eine PR für eine andere Art von Projekt-Methode einzureichen, die Sie brauchen, oder Sie könnten die Art der Kamera, die Sie verwenden, ableiten und die zusätzliche Methode hinzufügen.

+0

Ich denke, du hast Recht. Ich war einfach nur genervt, weil ich ein paar Stunden damit verschwendet habe, einen Fehler zu finden, weil ich dachte, ich könnte mit Sicherheit davon ausgehen, dass diese beiden Methoden paarweise sind und das war der letzte Ort, an dem ich nachgesehen habe. Ich finde es nur eine schlechte Design-Wahl, dass der Unterschied nicht in der Benennung widerspiegelt. –

Verwandte Themen