首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glReadPixels读取"out of frames“区域

glReadPixels读取"out of frames“区域
EN

Stack Overflow用户
提问于 2012-08-01 15:04:34
回答 2查看 848关注 0票数 0

我画了OpenGL 3200x2000大小的纹理四边形。OpenGLView帧大小设置为940x560。它像它应该画的那样绘制四边形。当我尝试将其保存为图像(使用glReadPixels)并将glReadPixels区域从(0,0)设置为(3200,2000)时,Bun。它创建了像素数据3200x2000,但当我将其保存到文件中时,我看到小图像部分(从左下角开始是940x560),整个其他区域都是黑色的。那么我该如何阅读屏幕外的区域呢?我试过使用Framebuffer,但它非常复杂,在创建它的时候出错等等。有没有其他的解决方案?

情景可视化:

原始图像如下所示(3200x2000):

OpenGLView看起来像这样(940x560):

保存的图像如下所示(3200x2000):

EN

回答 2

Stack Overflow用户

发布于 2012-08-01 16:22:53

所以你要渲染到窗口。这个窗口有一个特殊的大小。除了这个大小,什么都不存在。

这是OpenGL所说的“像素所有权测试”的一部分。如果一个像素不属于上下文,那么它的内容是未定义的。窗口外部的像素不属于上下文,因此它们的内容是未定义的。

这就是framebuffer objects存在的原因之一:这样你就可以在你的窗口之外渲染。但请注意:存在最大视口大小限制。

或者,可以以屏幕大小的片段进行渲染,在每次渲染后下载每个片段,然后移动相机以渲染下一个片段。

票数 4
EN

Stack Overflow用户

发布于 2012-08-01 15:18:18

在代码或平台方面,您没有给出太多细节。

但我认为你应该使用屏幕外渲染,而不是仅仅从渲染窗口中读取。如果您不熟悉帧缓冲区对象的使用,下面是一个最小的示例:

https://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/minimalfbo

编辑#1:

由于OP提到平台是OS X,所以我在下面发布了我的代码,其中显示了iOS中的一个最小的FBO示例:

https://github.com/glman74/simpleFBO

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11754157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档