2016-04-08 5 views
1

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; 
} 

Antwort

2

Die Funktion einer Projektionsmatrix (im Zusammenhang mit dem Grafik-APIs, wie beispielsweise OpenGL) ist an Eckpositionen aus dem Blickfeld-Raum in Clip-Raum zu transformieren.

Clip-Speicherplatz ist in der Regel eine Unit-Box (obwohl in D3D ist es eine halbe Einheit-Box). Wenn eine Eckpunktposition nach der Umwandlung in den Clip-Raum nicht innerhalb dieser Einheits-Box liegt, wird sie abgeschnitten. Dies ist im Wesentlichen, wie das System "weiß", dass der Würfel auf dem Bildschirm sichtbar ist.

+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

+0

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

+0

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

Verwandte Themen