我想在 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/