0

我正在使用 C++ 上的 OpenGL 渲染图像,并希望访问生成的图像以对其进行更多处理。(我正在渲染一个图像,有一个它应该看起来像的实际图像,并且想要计算两者之间的像素差异。)

不过,到目前为止,我只是将图像渲染到屏幕上,我不知道如何渲染图像,然后再访问绘制的直接像素。我并不特别关心我是否可以在屏幕上看到图像,我想要的只是图像被渲染到我可以从 CPU 访问的某个内存区域。你怎么做到这一点?

或者,是否可以将它应该看起来像的图像发送到 OpenGL 并计算 GPU 上的像素差异?任何一种选择都适合我,但我越快越好。(现在,我可以每秒渲染大约 100 帧,但还没有弄清楚如何进行比较。)

4

2 回答 2

2

是的,你可以在 GPU 上做到这一点。将 2 个图像放入纹理中。用两个纹理绘制一个填充框架的四边形多纹理,并确保提供纹理坐标。编写片段着色器来计算差异。(当评论者问你是否想使用可编程管道时,这是它很重要的一个原因。如果你只使用固定功能管道,你就没有编写片段着色器的选项。)

于 2012-12-15T07:02:51.593 回答
1

显而易见的方法是使用glReadPixels将帧缓冲区中的渲染结果读取到主机内存。

于 2012-12-15T06:40:24.247 回答