Wie ich es verstanden habe, skaliert eine Projektionsmatrix ein Polygon abhängig davon, wie weit entfernt oder nah es von der Kamera ist. Obwohl ich völlig falsch liegen könnte. Meine Frage ist, wie "weiß" die Projektionsmatrix, um die Seiten der folgenden cube zu zeigen, wie sich die Kamera bewegt, wenn die Matrix nur "skalieren" Polygone werden soll?Die Projektionsmatrix ist mehr als skalieren, oder?
Beachten Sie im Bild, der Würfel ist auf der rechten Seite des Bildschirms, durch Bewegen der Kamera nach links. Wenn die Kamera in die entgegengesetzte Richtung (nach rechts) bewegt wird, um den Würfel zu zentrieren, wird die Seite des Würfels wie erwartet verschwinden.
Hier ist meine Matrix-Code:
private void createProjectionMatrix(){
float aspectRatio = (float) Display.getWidth()/(float) Display.getHeight();
float y_scale = (float) ((1f/Math.tan(Math.toRadians(FOV/2f))) * aspectRatio);
float x_scale = y_scale/aspectRatio;
float frustum_length = FAR_PLANE - NEAR_PLANE;
projectionMatrix = new Matrix4f();
projectionMatrix.m00 = x_scale;
projectionMatrix.m11 = y_scale;
projectionMatrix.m22 = -((FAR_PLANE + NEAR_PLANE)/frustum_length);
projectionMatrix.m23 = -1;
projectionMatrix.m32 = -((2 * NEAR_PLANE * FAR_PLANE)/frustum_length);
projectionMatrix.m33 = 0;
}
obwohl dies antwortet, dass der Würfel immer noch auf dem Bildschirm sichtbar ist, antwortet er nicht, wie er die Würfelposition aktualisiert, wenn sich die Kamera bewegt. Vielleicht können Sie weiter erklären oder visuelle Details geben? – reddish
Ich habe Ihr Programm nicht, so dass die Bereitstellung von Visuals ziemlich unmöglich ist ... "Kamera" Bewegung wird in der Regel von der View-Matrix, nicht die Projektionsmatrix behandelt. Normalerweise gibt es drei Matrizen, die bestimmen, wie ein Objekt im Clip-Raum endet: die Modellmatrix (Orientierung und Position des Objekts 'in-the-world'), die Ansichtsmatrix (Ausrichtung, Position der 'Kamera'), und die Projektionsmatrix (wie die Kamera projiziert wird). Wenn sich die Ansicht ändert, würde dies zu einer Änderung der Position des Würfels innerhalb des Clip-Bereichs führen. Wenn die Änderung groß genug ist, könnte sie sich außerhalb der Clip-Box befinden. – MuertoExcobito
danke für Ihre Antwort. Aber auch nach dem Deaktivieren jeder anderen Matrix werden die Seiten des obigen Dreiecks immer noch korrekt gerendert. Ich möchte nur das "Wie" der Projektionsmatrix kennen, um die Seiten des Würfels anzuzeigen/zu verbergen. – reddish