投影矩阵不仅仅是缩放,对吗?

时间:2016-04-08 17:10:12

标签: java opengl lwjgl projection-matrix

正如我所了解的那样,投影矩阵根据多边形离相机的距离或近距离来对多边形进行缩放。虽然我可能完全错了。 我的问题是,投影矩阵"如何知道"当相机移动时,显示以下cube的边,当矩阵仅被假定为"缩放"多边形吗

请注意,在图像中,通过向左移动相机,立方体将偏离屏幕的右侧。如果相机向相反方向(向右)移动以使立方体居中,则立方体的一侧将按预期消失。

这是我的矩阵代码:

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

1 个答案:

答案 0 :(得分:2)

投影矩阵的功能(在图形API的上下文中,例如OpenGL)是将顶点位置从视图空间变换到剪辑空间。

剪辑空间通常是一个单位框(虽然在D3D中它是一个半单位框)。如果转换为剪辑空间后的顶点位置不在该单位框内,则会对其进行剪裁。这基本上是系统“知道”立方体在屏幕上可见的方式。