La matriz de proyección hace más que escalar, ¿verdad?

Como tengo entendido, una matriz de proyección escala un polígono dependiendo de qué tan lejos o cerca esté de la cámara. Aunque podría estar completamente equivocado.Mi pregunta es, ¿cómo "sabe" la matriz de proyección mostrar los lados de lo siguientecubo, a medida que la cámara se mueve, cuando la matriz solo supone polígonos de "escala"?

Observe que en la imagen, el cubo está hacia el lado derecho de la pantalla, moviendo la cámara hacia la izquierda. Si la cámara se mueve en la dirección opuesta (a la derecha) para centrar el cubo, el lado del cubo desaparecerá como se esperaba.

Aquí está mi código de matriz:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta