在1920 * 1080分辨率下,相机对焦不在LWJGL中居中

问题描述

我正在关注LWJGL2的系列教程,到目前为止,一切进展顺利,直到我决定将1280x720分辨率更改为1920x1080全屏。相机突然偏心,这意味着当我看着某个点并向前移动时,它并不会移动到该点。

我已经做了什么: 我发现一个遇到相同问题的人,但他忘记设置视口,而设置视口就成功了。我还发现全屏显示还是1280x720仍居中。我搜索了所有代码,只将宽度和高度分配给了最终的静态int变量,然后将它们用于投影矩阵和填充物。我尝试了800x600、1000x600、1700x1000,一切都很好。

关于该分辨率的我的问题可能会影响显示和渲染吗?发生了什么事?

这是显示代码

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

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)