OpenGL正交视图应用程序窗口到全屏

时间:2012-01-16 04:33:29

标签: opengl lwjgl

我正在开发基于图块的2D OpenGL游戏(自上而下,2D Zelda风格),我正在使用正交投影。我想让这款游戏兼容窗口和全屏兼容。

我最好创建缩放2D绘图功能,以便在全屏模式下绘制瓷砖尺寸时可以放大尺寸,或者我应该只在窗口模式下完全设计游戏,然后在每当一个时放大整个绘图区域播放器是全屏模式吗?

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

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

其他背景信息:我正在使用Java / LWJGL制作这个游戏,我正在使用OpenGL 1.1函数绘图。

1 个答案:

答案 0 :(得分:4)

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

窗口越来越大了?放大用于构造投影矩阵的参数。

如果您希望使瓷砖尺寸与窗口尺寸成比例,请不要根据窗口尺寸更改投影矩阵!

关键是,如果还没有捕获,则投影矩阵:由于它,顶点被投影到视口上,实际上顶点被“缩放”,让你可以选择合适的单位系统而不必担心缩放。 / p>


简而言之,正交投影来自4个参数的specified底部。这些参数只是投影到窗口屏幕边界上的顶点的XY坐标(实际上是viewport)。

让我们举一些具体的例子。

示例1

窗口大小:400x300

OpenGL顶点位置(2D):25x25

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

模型视图矩阵设置为标识

- >点将以25x25的窗口坐标绘制

示例2

窗口大小:800x600(w.r.t示例1加倍)

OpenGL顶点位置(2D):25x25

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

模型视图矩阵设置为标识

- >点将以50x50的窗口坐标绘制。它增加了一倍,因为正投影没有改变。

示例3

假设我想在示例1中投影顶点,即使窗口的宽高比发生变化。以前的窗口 4:3 。此示例中的窗口是 16:9 :它更大!这里的诀窍是强制(右 - 左)(上 - 下)之间的比例

窗口大小:1600x900(w.r.t示例1加倍)

OpenGL顶点位置(2D):25x25

正投影矩阵

  • 左= 0
  • 右= 533(300 * 16/9)
  • Bottom = 0
  • Top = 300

模型视图矩阵设置为标识

- >在窗口坐标中,点将以25x25(而不是33.3x25,如果我们使用示例1的投影矩阵)绘制。