Opengl 1920*1080分辨率的LWJGL中的相机焦距不居中
我正在学习LWJGL2系列教程,到目前为止,一切都进展顺利,直到我决定将1280x720分辨率改为1920x1080全屏。相机突然偏离中心,这意味着当我看一个点并向前移动时,它不会移动到那个点 我已经做了: 我发现一个家伙遇到了同样的问题,但他忘了设置视口,设置视口就成功了。我还发现,无论是否全屏,相机仍然以1280x720为中心。我搜索了我所有的代码,只将宽度和高度赋给最终的静态int变量一次,然后将它们用于投影矩阵之类的东西。我试过800x600,1000x6001700x1000,一切都很好 我在该分辨率中的问题可能会影响显示和渲染?发生了什么事 以下是显示代码:Opengl 1920*1080分辨率的LWJGL中的相机焦距不居中,opengl,camera,lwjgl,display,projection,Opengl,Camera,Lwjgl,Display,Projection,我正在学习LWJGL2系列教程,到目前为止,一切都进展顺利,直到我决定将1280x720分辨率改为1920x1080全屏。相机突然偏离中心,这意味着当我看一个点并向前移动时,它不会移动到那个点 我已经做了: 我发现一个家伙遇到了同样的问题,但他忘了设置视口,设置视口就成功了。我还发现,无论是否全屏,相机仍然以1280x720为中心。我搜索了我所有的代码,只将宽度和高度赋给最终的静态int变量一次,然后将它们用于投影矩阵之类的东西。我试过800x600,1000x6001700x1000,一切都很
public static void createDisplay() {
ContextAttribs attribs = new ContextAttribs(3,2)
.withForwardCompatible(true)
.withProfileCore(true);
try {
DisplayMode displayMode = null;
DisplayMode[] modes = Display.getAvailableDisplayModes();
for (int i = 0; i < modes.length; i++) //With or without doesn't change anything
{//Even if I juste create a DisplayMode with width and height only it is still off centered for 1920*1080
if (modes[i].getWidth() == width
&& modes[i].getHeight() == height
&& modes[i].isFullscreenCapable())
{
displayMode = modes[i];
}
}
Display.setDisplayMode(displayMode);
Display.setFullscreen(true); //With or without doesn't change anything
Display.create(new PixelFormat(),attribs);
Display.setTitle("CubeLand");
} catch (LWJGLException e) {
e.printStackTrace();
}
GL11.glViewport(0, 0, width, height);
}
谢谢你的帮助
float aspectRatio = (float) DisplayManager.width / (float) DisplayManager.height;
float y_scale = (float) ((1f / Math.tan(Math.toRadians(FOV / 2f))));
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;