据我了解,投影矩阵根据多边形与相机之间的距离来缩放多边形。虽然我可能完全错了。我的问题是,当相机仅移动“投影”多边形时,投影矩阵如何“知道”它显示以下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;
}
最佳答案
投影矩阵的功能(在图形API(例如OpenGL)的上下文中)是将顶点位置从视图空间转换为剪辑空间。
剪辑空间通常是一个单位框(尽管在D3D中是一个半单位框)。如果在转换为剪切空间后的顶点位置不在该单位框中,则将其剪切。本质上,这就是系统“知道”多维数据集在屏幕上可见的方式。