【发布时间】:2014-06-14 17:35:20
【问题描述】:
我想创建两个视口。 第一个是正常显示。 第二个仅用于保存到图像,例如每分钟保存到新图像。 怎么做? 谢谢~
【问题讨论】:
我想创建两个视口。 第一个是正常显示。 第二个仅用于保存到图像,例如每分钟保存到新图像。 怎么做? 谢谢~
【问题讨论】:
您可以使用两种方法:
1) 帧缓冲区 (http://www.opengl.org/wiki/Framebuffer),它本质上是您可以在其上进行绘图调用的第二帧。对帧缓冲区进行的任何渲染都会保存到内部纹理对象中,然后您可以抓取该对象并对其进行任何操作。附带说明一下,您可以使用帧缓冲区来制作全屏效果(绽放、抗锯齿等)
2) 然而,更有可能的是,您正在寻找 glReadPixels (https://www.opengl.org/sdk/docs/man/html/glReadPixels.xhtml)。这是一个快速函数调用,您可以在完成绘图调用后进行,但在您换出缓冲区(假设您正在使用双缓冲上下文进行绘图)。此函数将从您刚刚发出绘图调用的帧缓冲区中复制选择的像素,并将它们以数组的形式提供给您,您可以再次使用它来做任何您想做的事情。这样做的好处是您不必忍受创建第二个“视口”的麻烦(我认为您的意思是帧缓冲区?),您可以将像素从最终显示给用户的同一帧缓冲区中复制出来.
如果您有任何问题,请告诉我!
【讨论】:
glReadPixels 不一定要从您正在绘制的同一个缓冲区中读取(而且它通常不是您所谓的快速函数调用,因为它会强制 CPU /GPU 同步,除非您使用 PBO)。如果它不这样做,大多数时候它并不是特别有用,但 GL 实际上确实保持了单独的 Draw 和 Read 缓冲区状态。这就是为什么您链接到的手册页在“另见”下列出了glReadBuffer。