2012-01-16 84 views
2

我正在开发基于瓦的2D OpenGL游戏(自顶向下,2D塞尔达风格),我正在使用正交投影。我想让这个游戏兼容窗口和全屏。OpenGL正交视图应用程序窗口到全屏

我最好创建缩放2D绘图函数,以便在全屏模式下绘制时可以放大图块大小,或者我应该在窗口模式下完全设计游戏,然后每当放大整个绘图区域时玩家处于全屏模式?

最后,我希望在我的瓷砖重新缩放时保持最佳的纹理质量。

UPDATE /澄清:这是我的关注(这可能会或可能甚至不是一个真正的问题):如果我绘制整个窗口视图大小的画布区域,然后将其放大,我是有可能缩减原128x128像素纹理到64x64像素窗口大小的纹理,然后再将它们重新缩放到80x80,当我缩放整个游戏区域以获得全屏视图时?

其他背景信息:我正在使用Java/LWJGL进行此游戏,并且正在使用OpenGL 1.1函数进行绘图。

+0

还不如缩小?从128x128px – rkmax 2012-01-16 04:45:16

+0

好点。我会修改这个问题,谢谢! – hithere 2012-01-16 04:55:50

+0

究竟是什么问题? – rkmax 2012-01-16 15:27:17

回答

4

不要缩放瓦片,因为您的全屏窗口比正常的窗口大,但要使用投影矩阵。

窗口变大了吗?放大用于构建投影矩阵的参数。

如果要根据窗口大小调整瓦片大小与窗口大小的比例,请不要改变投影矩阵!关键是,如果你还没有捕捉到projectiona矩阵:由于它,顶点被投影到视口上,实际上顶点被“缩放”,让你选择适当的单位系统而不用担心缩放。


在几句,正投影为4个参数specified底部顶部。这些参数不过是投影到窗口屏幕边界上的顶点的XY坐标(真的是viewport)。

让我们来做一些具体的例子。

实施例1

窗口大小:400x300的

OpenGL的顶点位置(2D):25×25

正投影矩阵: - 左= 0 - 右= 400 - 底部= 0 - 顶端= 300

模型视图矩阵组身份

- >点将在窗口25×25绘制坐标

实施例2

窗口大小:800x600(实例1加倍)

OpenGL的顶点位置(2D):25×25

正投影矩阵: - 左= 0 - 右= 400 - 底部= 0 - 顶端= 300

模型视图矩阵设置为标识

- >点将在窗口坐标中以50x50绘制。由于正射投影没有改变,因此翻倍了。

实施例3

设说我希望投影实施例1中的顶点即使窗口变化的宽高比。以前的窗户是4:3。在这个例子中的窗口是16:9:它更大!这里的技巧是迫使之间的比(右 - 左)(顶部 - 底部)

窗口大小:1600×900(一倍W.R.吨实施例1)

OpenGL的顶点位置(2D):25×25

正投影矩阵

  • 左= 0
  • 右= 533(300 * 16/9)
  • 底= 0
  • 顶= 300

模型视图矩阵组身份

- >点将在25×25被吸入(代替33.3x25,如果我们使用实施例1的投影矩阵)在窗口坐标。

+0

谢谢,卢卡!作为后续问题,当我缩放到具有不同宽高比的不同显示器时,是否有任何适当扩展投影矩阵的建议?现在,如果我从16:9窗口模式转换到3:4全屏模式,我的游戏视图会变形。是否可以创建一个信箱投影矩阵? – hithere 2012-01-16 17:03:54

+0

谢谢你们的好例子!你真的帮了很大忙! :) – hithere 2012-01-16 18:46:17

+0

@Luca你也帮助我很多,因为我正在为自己的游戏学习;) – rkmax 2012-01-16 20:52:12