【问题标题】:Accessing rendered OpenGL image访问渲染的 OpenGL 图像
【发布时间】:2012-12-15 06:32:30
【问题描述】:

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

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

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

【问题讨论】:

  • 固定功能还是可编程流水线?
  • @genpfault:这对这个问题有影响吗?
  • @genpfault 我不知道你的意思是什么?我生成的图像每次都不一样。
  • @Dolda2000:我会这么认为。至少关于第三段。

标签: opengl


【解决方案1】:

是的,您可以在 GPU 上执行此操作。将 2 个图像放入纹理中。用这两个纹理绘制一个填充框架的四边形多纹理,并确保提供纹理坐标。编写片段着色器来计算差异。 (当评论者问您是否要使用可编程管道时,这是一个重要的原因。如果您只使用固定功能管道,您将无法选择编写片段着色器。)

【讨论】:

  • 需要注意的是,如果比较函数比较简单,也可以用固定函数混合来完成。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 2016-09-02
    • 2013-05-06
    • 2011-10-16
    • 1970-01-01
    • 2013-06-06
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多