OpenGL缩放GUI

时间:2015-03-16 15:13:31

标签: java opengl lwjgl

我正在开发2D游戏。我自己的显示器是1080p,因此GUI基于1080p的显示器。只要显示器的分辨率小于1080p,这就会导致GUI看起来很糟糕。我意识到这可能不是那么正确的编程,但我对改变整个GUI的开发太过分了。

对我来说,这个问题的一个明显的解决方案是在我的渲染代码的开头添加一个glScalef(scale, scale, 1)。这很有效,但看起来很可怕。纹理没有正确缩放,文本看起来也很糟糕。

我的下一个想法是将整个场景渲染到四边形(四边形为1920x1080),然后将该四边形缩放到显示器的大小。有点像下采样的工作原理。问题是我不知道如何在OpenGL中实现它。我以前见过人们这样做,所以我知道它一定是可能的,但我找不到任何能够正确解释如何做到这一点的教程。

修改

这是问题所在: the problem

注意左侧图片上的蓝色和橙色线条(仅1像素宽)。右边是原始的和期望的效果(当然我只想要缩小尺寸)。

这是我用于正常缩减的代码:

// the rendering screen size (1080p)
public static final Dimension RENDERING_SCREEN_SIZE = new Dimension(1920, 1080);
// a temporary fixed screen size that is commonly used by laptops
public static final Dimension SCREEN_SIZE = new Dimension(1366, 768);
private static float scale = 1.0F;

//...//

public static final void initialize() {
    //...//

    scale = (float) (SCREEN_SIZE.getWidth() / RENDERING_SCREEN_SIZE.getWidth());       
}

public static final void startRenderLoop() {
    while (!Display.isCloseRequested()) {
        GL11.glLoadIdentity();
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
        GL11.glScalef(scale, scale, 0);

        // render the scene

        Display.sync(60);
        Display.update();
    }

    Display.destroy();
}

请注意,看到的四边形是不是彩色四边形,它们是纹理四边形。

/修改

非常感谢任何有关此缩小版或其他解决方案的帮助。

1 个答案:

答案 0 :(得分:0)

即使是熟练的程序员,开发GUI也不是一件容易的事。要实现GUI缩放,您需要确定它的外观。您想缩放给定尺寸的所有元素还是仅缩放其中的一些元素?你是否希望看到看起来不好的元素,因为你将它们缩放到另一个宽高比的尺寸?如果您想管理您想要缩放的内容以及不想缩放的内容 - 您应该缩放屏幕上的每个元素。正如我所看到的,您只想将整个屏幕渲染到纹理,然后将其应用于每帧的缩放四边形。 FBO(帧缓冲对象)应该可以帮助您将场景渲染到纹理。最后一步 - 缩放。如果你把它缩放到某种程度上是错误的 - 你会得到像这样的文物。如果这太可悲了 - 尝试使用过滤模式等纹理参数。实际的实施现在掌握在你的手中。祝你好运!