OpenGL 1.1以固定分辨率和放大率渲染

emeijp43  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(185)

我试图渲染一个场景在320x240永久模仿感觉经典的240p系统,并将其升级到全尺寸的屏幕。
我的问题是,虽然我可以使用一组分辨率的sprite和glOrtho来处理这个效果,但它通常只是在较高的分辨率下完全渲染,最终可能会慢一点,旋转一个sprite最终会使分辨率明显高出很多。
是否有某种方法可以使用OpenGL 1.1以320x240渲染视口,然后将其放大以适合屏幕?
现在,我正在使用此工具设置用于渲染的2D视口,其中width和height是画布的宽度和高度。

GL11.glViewport(0, 0, width, height);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glClear(GL11.GL_ACCUM);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0.0D, 320, 240, 0.0D, 0.0D, 100.0D); //320 and 240 is the "true size"
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();

我听说过渲染到纹理上,但是我找不到任何关于如何在OpenGL 1.1中进行渲染的信息。

cnwbcb6i

cnwbcb6i1#

我听说过渲染到纹理上,但是我找不到任何关于如何在OpenGL 1.1中进行渲染的信息。
这是因为OpenGL 1.1是1997年的产品--差不多是四分之一世纪前的产品,没有渲染到纹理的功能。
最接近的是glCopyTexImage2D,它允许您将帧缓冲区内容复制到纹理对象中(从技术上讲,这将允许在GPU端发生,而无需往返CPU和系统内存)。因此,您基本上以内部分辨率渲染数据-仅使用帧缓冲区的一部分作为视口,将其复制到纹理中,然后用该纹理和所需的过滤器在整个帧缓冲区上绘制矩形。
但是要注意的是,GL_MAX_TEXTURE_SIZE在GL 1.1中保证至少为64,所以要以一种在任何符合GL 1.1的实现上都能工作的方式编写它,你必须有代码来将帧缓冲区纹理拆分为64 x64像素块。
另一种方法是到系统内存的往返,这需要使用glReadPixels阅读回数据,然后在应用glPixelZoom设置的同时再次通过glDrawPixels绘制数据。

相关问题