opengl 窗口缩放导致JOGL中出现空格

pgx2nnw8  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(120)

我使用Java OpenGL绑定(JOGL 2.3.2),问题是我的画布卡在我的表单的左下角,所以无论我写什么,画布的顶部和右侧都有黑色空间。
我发现这是因为我的windows设置中的缩放比例被设置为125%,如果我将其设置为100%,问题就消失了。但是,我觉得这不是解决此类问题的正确方法。以下是我创建框架的代码:

//FrameMain class just adds listener to frame so it can be closed by pressing cross button
final FrameMain frame = new FrameMain("Form 1");
frame.setSize(720, 720);

final GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities capabilities = new GLCapabilities(profile);

// The canvas
final GLCanvas glcanvas = new GLCanvas(capabilities);
AppMain b = new AppMain();
glcanvas.addGLEventListener(b);
glcanvas.setSize(720, 720);
frame.add(glcanvas);
frame.setVisible(true);

还有我的显示和重塑方法:

public void display(GLAutoDrawable drawable) {
    GL2 gl = drawable.getGL().getGL2();
    gl.glBegin(GL2.GL_QUADS);
    gl.glVertex3f(-1, 1, 0);
    gl.glVertex3f(1, 1, 0);
    gl.glVertex3f(1, -1, 0);
    gl.glVertex3f(-1, -1, 0);
    gl.glEnd();
}

public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
    GL2 gl = drawable.getGL().getGL2();

    gl.glLoadIdentity();
    gl.glViewport(0, 0, width, height);
}

我得到的结果是:

我怎样才能使画布占据完整的形式,而不是像现在这样?
附言:我不能改变使用的技术,它应该是JOGL和一些创建窗口没有外部库。是的,我知道swing是过时和丑陋的

emeijp43

emeijp431#

因此,根据Rabbid76的建议,我想出了这个解决方案:我在我的类中添加了以下内容,使用的答案是https://stackoverflow.com/a/70119734/20433881

private static JFrame frame = null;
    private static float scalingFactor;
    
    private static float getScalingFactor() {
        return (float) getWindow(frame).getGraphicsConfiguration().getDefaultTransform().getScaleX();
    }

在创建框架后,将以下行添加到main():

scalingFactor = getScalingFactor();

我也这样修改了viewport的行:

gl.glViewport(0, 0, (int) (width * scalingFactor), (int) (height * scalingFactor));

相关问题