【发布时间】: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 缩放问题(如屏幕截图)?
-
理想情况下两者都有!更多信息总是有帮助的。