为 fbo 提供预先存在的纹理以在其上绘制

Posted

技术标签:

【中文标题】为 fbo 提供预先存在的纹理以在其上绘制【英文标题】:giving preexisting texture to fbo to draw on it 【发布时间】:2014-07-11 09:49:24 【问题描述】:

我想知道是否可以将非 NULL 纹理提供给帧缓冲区以在其上进行渲染。我的意思是在它上面画图,让它成为最终纹理的背景。

从我的尝试来看,只是保留我给的纹理并直接渲染它,上面没有任何绘图(好像绘图部分没用一样)。 如果我给出一个 NULL 纹理,则绘制完成。

所以我想知道这是否可能,我只是做错了吗?

我见过的所有使用 fbo 的例子都只显示发送的 NULL 纹理。

【问题讨论】:

【参考方案1】:

您尝试做的事情并不像 FBO 附件中的内容从头开始呈现的用例那样普遍。这就是为什么你找不到那么多例子的原因。

不过,它仍然是完全合法的,应该可以工作。唯一的区别应该是在将纹理附加到 FBO 并开始渲染之后,您不会调用 glClear()

您必须小心的一种情况是,如果您在原始纹理内容之上使用深度缓冲进行渲染。在这种情况下,您当然需要像往常一样在 FBO 中添加深度缓冲区附件(通常是渲染缓冲区)。在这种情况下,您需要在开始渲染之前清除深度缓冲区,但不是颜色缓冲区:

glClear(GL_DEPTH_BUFFER_BIT);

【讨论】:

好吧,我无法将纹理传递给 fbo。但是你给了我一个想法。我首先绘制一个带有纹理的基本四边形,然后清除深度缓冲区。并继续画。效果很好。

以上是关于为 fbo 提供预先存在的纹理以在其上绘制的主要内容,如果未能解决你的问题,请参考以下文章

带有 FBO 的 OpenGL 阴影映射 - 多个拖尾绘制

使用单个 FBO 将单个场景从多个视点绘制到多个纹理中(每个视点 1 个)仅产生一个有效纹理

绘制到纹理后的Opengl ES 2.0 glDeleteFramebuffers

WebGL入门(四十一)-使用帧缓冲区对象(FBO)实现将渲染结果作为纹理绘制到另一个物体上

在计算机上使用 OpenGL 绘制 FBO 挂起

在 CUDA 中修改 OpenGL FBO 纹理附件