我绘制OpenGL 3200x2000尺寸纹理四边形。 OpenGLView框架大小设置为940x560。它应该绘制四边形。发髻当我尝试将其保存为图像(使用glReadPixels)并将glReadPixels区域设置为(0,0)到(3200,2000)。它创建像素数据3200x2000,但当我将其保存到文件时,我看到小图像部分(从左下角940x560),整个其他区域是黑色。那么如何阅读屏幕外区域呢?我尝试使用Framebuffer,但它非常复杂,创建它时出错等等......还有其他解决方案吗?
原始图像看起来像这样(3200x2000):
OpenGLView看起来像这样(940x560):
保存的图像看起来像那样(3200x2000):
答案 0 :(得分:4)
所以你要渲染到窗口。嗯,窗户有一个特定的大小。并且在之外没有任何东西存在。
这是OpenGL称之为“像素所有权测试”的一部分。如果像素不属于上下文,则其内容未定义。窗口外的像素不属于上下文,因此其内容未定义。
这是framebuffer objects存在的一个原因:这样您就可以渲染窗口大小。虽然有人建议:最大视口大小限制。
或者,您可以渲染屏幕大小的片段,在每次渲染后下载每个片段,然后移动相机以渲染下一个片段。
答案 1 :(得分:1)
您在代码或平台方面没有提供太多细节。
但我认为您应该使用屏幕外渲染,而不仅仅是从渲染窗口中读取。如果您不熟悉使用帧缓冲区对象,这里有一个最小的例子:
https://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/minimalfbo
编辑#1:
由于OP提到该平台是OS X,我在下面发布我的代码,这显示了iOS中最小的FBO示例: