Nach zwei Stunden googeln (here, here, here, here und here, und eine Tonne andere, die ich nicht zu finden bin gestört), dachte ich, Ich hatte endlich die Theorie gelernt, wie man 3D-Koordinaten in 2D-Koordinaten umwandelt. Aber es funktioniert nicht. Die Idee besteht darin, die 3D-Koordinaten eines Schiffes in 2D-Koordinaten auf dem Bildschirm zu übersetzen, um den Benutzernamen des Spielers, der dieses Schiff steuert, zu rendern.gluProject 3D-Konvertierung von Koordinaten in 2D nicht konvertieren Koordinaten Coordinate die 2D-Y richtig
Jedoch wird der Text in der falschen Stelle zu machen:
Der Text ist "Test || || 2DXCoordinate 2DZCoordinate".
Hier ist meine getScreenCoords()
- Die konvertiert die 3D-Koordinaten in 2D.
public static int[] getScreenCoords(double x, double y, double z) {
FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4);
IntBuffer viewport = BufferUtils.createIntBuffer(16);
FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
FloatBuffer projection = BufferUtils.createFloatBuffer(16);
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
boolean result = GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
if (result) {
return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1) };
}
return null;
}
screenCoords.get (0) gibt eine perfekte X-Koordinate zurück. ScreenCoords.get (1) wird jedoch höher oder niedriger, je nachdem, wie weit ich vom Schiff entfernt bin. Nach vielen Stunden Debugging, habe ich es verengt, um diese Zeile nicht mehr korrekt ist:
GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
Aber ich habe keine Ahnung, was falsch ist. Die X-Koordinate des Schiffes ist in Ordnung .... Warum nicht das Y?
Laut BDL Antwort, ich liefern die "falsche Matrix" zu gluProject(). Aber ich sehe nicht, wie das möglich ist, da ich die Methode direkt nach dem Rendern meines Schiffes anrufe (was offensichtlich in welcher Matrix auch immer das Schiff zeichnet).
Ich kann einfach nicht ergründen, was falsch ist.
Hinweis: Die Antwort von BDL ist vollkommen ausreichend, außer dass nicht erklärt wird, warum die Y-Koordinaten falsch sind.
Hinweis: Diese Frage war früher viel länger und viel vager. Ich habe meine eingegrenzte Frage nach stundenlangem Debugging gepostet.
1. setzen Sie Ihre GL_MODELVIEW-Matrix irgendwo in Ihrem Code? Für mich sieht es so aus, als wäre es eine Identitätsmatrix. 2. Enthält orthographicProjectionMatrix die perspektivische Projektion, die Sie verwenden, um Ihr Schiff zu rendern? – BDL
@BDL orthographicProjectionMatrix enthält die Projektion, die ich verwende, um den Text zu rendern. Nicht das Schiff. – Joehot200
Im zweiten von Ihnen geposteten Codeblock laden Sie orthographicProjectionMatrix in Ihre Projektionsmatrix. Was ist der Inhalt dieser Matrix? Und für mich sieht es so aus, als ob Sie die Modelview-Matrix nie einstellen würden. Nimmst du nie glTranslatef/glRotatef beim Zeichnen des Schiffes? – BDL