如何解决在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 举报,一经查实,本站将立刻删除。