对纹理进行增量更新的最佳方法是什么? (渲染到纹理)

时间:2011-06-07 13:28:52

标签: c++ opengl

我想在OpenGL中渲染一个纹理,但是会逐渐改变纹理。

以下是我想象的过程:

  • 清除颜色& glViewport()到纹理大小
  • 绘制原始纹理(glOrtho或其他),如何以完美品质复制原件?
  • 绘制增量更改
  • 再次清除,将视口设置为屏幕尺寸
  • 绘制场景&翻转

有更优化的方法吗?

1 个答案:

答案 0 :(得分:5)

你有两个选择。如果你的硬件不支持FBO,你必须像你写的一样。要绘制原始纹理,只需使用[0,1]纹理坐标绘制屏幕大小的四边形。确保使用GL_NEAREST作为过滤模式,使用GL_CLAMP_TO_EDGE作为包装模式,以获得图像的精确副本。然后在其上绘制增量更改。完成后,您可以通过glCopyTexSubImage2D

从帧缓冲区中获取纹理

当您的硬件支持FBO时,您可以获得更高的效率。在这种情况下,将纹理附加到FBO并渲染到其中。这样,您可以直接渲染到纹理中,无需复制。您也不需要复制原始纹理,只是不清除帧缓冲区(纹理),并在前一个数据的顶部渲染。请阅读some introductory material on framebuffer objects以获取更多信息。