我正在开发基于图块的2D OpenGL游戏(自上而下,2D Zelda风格),我正在使用正交投影。我想让这款游戏兼容窗口和全屏兼容。
我最好创建缩放2D绘图功能,以便在全屏模式下绘制瓷砖尺寸时可以放大尺寸,或者我应该只在窗口模式下完全设计游戏,然后在每当一个时放大整个绘图区域播放器是全屏模式吗?
最后,我希望在重新调整瓷砖时保持最佳的纹理质量。
更新/澄清:这是我的担忧(可能会或可能不是真正的问题):如果我绘制整个窗口视图大小的画布区域,然后将其放大,我是有可能将最初的128x128像素纹理缩小到64x64像素窗口大小的纹理,然后当我将整个游戏区域缩放到全屏视图时再将它们重新缩放到80x80?
其他背景信息:我正在使用Java / LWJGL制作这个游戏,我正在使用OpenGL 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
正投影矩阵:
模型视图矩阵设置为标识
- >在窗口坐标中,点将以25x25(而不是33.3x25,如果我们使用示例1的投影矩阵)绘制。