我只在DirectX应用程序中看到过这种功能:当您调整窗口大小时,渲染也会相应地拉伸,看起来它实际上是一个被拉伸的纹理。
如何在OpenGL中有效地完成此操作?这样做的目的是创建一个具有原始分辨率的全屏应用程序,因为它很难在LCD屏幕上选择较低的分辨率,并允许我以较低的分辨率渲染以获得更高的FPS。
答案 0 :(得分:2)
您需要渲染到纹理或渲染缓冲区,然后对实际的默认帧缓冲区执行glBlitFramebuffer
。然后正常交换缓冲区。
答案 1 :(得分:-1)
你调用glViewport()告诉OpenGL窗口的哪一部分(以像素为单位)最终将由OpenGL呈现。您可以使用glFrustum(),glOrtho()或glOrtho2D()之类的方法来设置您正在绘制的“世界”的参数。
如果您处理事件以告知您何时调整窗口大小,则可以再次调用glViewport()以相应地更新视口的大小。
所以,如果你的世界在正方形(例如),并且你的视口是矩形的,那么它将具有你所指的效果(它将相应地拉伸,就像它实际上是纹理一样)。