【问题标题】:OpenGL scaling GUIOpenGL 缩放图形用户界面
【发布时间】:2015-03-16 15:13:30
【问题描述】:

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

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

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

编辑

这就是问题所在:

请注意左侧图片上的蓝色和橙色线条(仅 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();
}

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

/编辑

非常感谢您对我的缩小规模的这个或其他解决方案的任何帮助。

【问题讨论】:

  • 结果会有什么不同?渲染缩放的场景或渲染缩放的四边形肯定看起来是一样的。实际上,后一种方法看起来会更糟——您需要将场景渲染到纹理并将该纹理应用于四边形,因此您将缩放像素(嗯,纹素)而不是矢量(多边形)数据。跨度>
  • 因为它实际上并没有缩放 GUI 组成的各个四边形。我有很多纹理,当四边形缩放时,纹理 uv 坐标似乎不再相同
  • 我认为我们需要see an example 才能真正了解您的问题。
  • 我的代码示例或 GUI 缩放问题(如屏幕截图)?
  • 理想情况下两者都有!更多信息总是有帮助的。

标签: java opengl lwjgl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2013-01-23
    相关资源
    最近更新 更多