c++ - 对纹理进行增量更新的最佳方法? (渲染到纹理)

标签 c++ opengl

我想在 OpenGL 中渲染纹理,但对纹理进行增量更改。

这是我想象的过程:

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

有没有更好的方法来做到这一点?

最佳答案

你有两个选择。如果您的硬件不支持 FBO,您将不得不按照您编写的方式进行操作。要绘制原始纹理,只需绘制一个具有 [0,1] 纹理坐标的屏幕大小的四边形。确保使用 GL_NEAREST 作为过滤模式,使用 GL_CLAMP_TO_EDGE 作为环绕模式,以获得图像的精确拷贝。然后在其上绘制增量更改。完成后,您可以通过 glCopyTexSubImage2D 从帧缓冲区获取纹理。

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

关于c++ - 对纹理进行增量更新的最佳方法? (渲染到纹理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265913/

相关文章:

c++ - 如何在 OpenGL 中渲染 3D 文本?

html - 使用 AT 命令执行 POST 时如何自定义 HTML header ?

c++ - 尝试在 Windows 上运行 Qt 应用程序的发布版本时出错

c++ - C++ std::vector 是否比 C99 可变长度数组慢?

opengl - 尝试构建简单的 OpenGL 程序时出现链接错误

vb.net - OpenGL:glDrawElements 给出未处理的异常:System.AccessViolationException

c++ - 分发具有可执行文件的共享对象(最佳实践?)

c++ - 如何在没有 p、q 等的情况下加载 RSA key 对

C++ - SDL/OpenGL 加载图像的颜色被反转

api - glUseProgram(0)有什么作用?