我试图永久渲染320x240的场景,以模仿经典240p系统的感觉,并将其升级到屏幕的全尺寸。
我的问题是,尽管我可以使用固定分辨率的精灵和glOrtho来模糊这种效果,但它通常只是完全以更高的分辨率呈现,最终可能会变慢一点,旋转精灵最终会使分辨率明显高得多。
是否有一些方法渲染在320x240的视口,然后高档,以适应屏幕,使用OpenGL 1.1?
现在我用它来设置渲染的2D视口,其中宽度和高度是画布的宽度和高度。
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中做到这一点的信息。
我听说过渲染到纹理,但是我找不到任何关于如何在OpenGL 1.1中做到这一点的信息。
那是因为OpenGL 1.1是从1997年开始的——实际上是四分之一个世纪以前。这里没有渲染到纹理
你得到的最接近的东西是glCopyTexImage2D
,它允许你将framebuffer内容复制到纹理对象中(从技术上讲,这将允许在GPU端发生,而无需往返CPU和系统内存)。所以你基本上是在内部分辨率中渲染你的数据——只使用framebuffer的一部分作为视口,将其复制到纹理中,然后用该纹理和所需的过滤器在完整的framebuffer上绘制一个矩形。
但是需要注意的是,GL_MAX_TEXTURE_SIZE
在GL 1.1中至少保证是64
,所以为了在任何符合GL 1.1的实现中都能工作,你必须有代码将你的framebuffer纹理分割成64x64像素块。
另一种选择-到系统内存的往返-将涉及使用glReadPixels
读取数据,并在应用glPixelZoom
设置时再次通过glDrawPixels
绘制数据。