Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 垂直调整屏幕大小时,四边形移动_Java_Opengl_Lwjgl - Fatal编程技术网

Java 垂直调整屏幕大小时,四边形移动

Java 垂直调整屏幕大小时,四边形移动,java,opengl,lwjgl,Java,Opengl,Lwjgl,我在屏幕上画了一个四边形,位于屏幕顶部并居中。当我调整屏幕大小使其不那么高时,四边形似乎以与它应该的方向相反的速度移动,即,在我的显示器上,它应该以相同的速度向上移动 在渲染之前,它一直被设置为位于屏幕顶部,并使每个循环居中 this.location[0] = (Display.getWidth()/2)-(this.size[0]/2); this.location[1] = 0; 然后渲染四边形并打印出其Y位置。无论我如何调整窗口大小,这都会始终返回0。通过打印鼠标坐标,我可以确认调整大

我在屏幕上画了一个四边形,位于屏幕顶部并居中。当我调整屏幕大小使其不那么高时,四边形似乎以与它应该的方向相反的速度移动,即,在我的显示器上,它应该以相同的速度向上移动

在渲染之前,它一直被设置为位于屏幕顶部,并使每个循环居中

this.location[0] = (Display.getWidth()/2)-(this.size[0]/2);
this.location[1] = 0;
然后渲染四边形并打印出其
Y
位置。无论我如何调整窗口大小,这都会始终返回
0
。通过打印鼠标坐标,我可以确认调整大小时屏幕顶部为
0
。那么,为什么即使我将四边形设置为
0
,然后在之后渲染它,它仍然没有在
0
处绘制

是否有一些Opengl或LWJGL的概念我不明白

这是Opengl的设置代码

    GL11.glEnable(GL_TEXTURE_2D);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,Display.getWidth(),Display.getHeight(),0 ,1, -1);
    glMatrixMode(GL_MODELVIEW);

既然没有人回答这个问题,而我已经找到了一个解决方案,尽管它可能效率低下,这里有一个答案

我换了线路

glOrtho(0,Display.getWidth(),Display.getHeight(), 0 ,1, -1);

这意味着顶部不再是顶部,而是屏幕的底部。然后,我必须在我的box类中创建另一个变量,称为
realY
,它是box/quad左角的实际y坐标

然后通过一些简单的数学(
this.realY=(Display.getHeight()-this.location[1])-this.size[1];
)我将输入Y转换为自身的倒置版本,因此0成为屏幕的高度,反之亦然


对我来说,这似乎是一个低效的解决方案,更像是一个变通办法。如果有人有更好的答案,请发布。

调整窗口大小时,您在做什么?通常,人们根据在“调整大小”方法中检索到的大小设置视口。@JackWhiteIII nothing。我需要移动相机还是什么的?我不知道,我已经很久没有使用OpenGL了。如果窗口已调整大小,请尝试再次调用OpenGL安装代码。@JackWhiteIII不起作用。所以我可以在将来写更好的问题,为什么这个被否决了?没有人能回答这个问题?
glOrtho(0,Display.getWidth(), 0,Display.getHeight(),1, -1);