Opengl 如何将后期处理着色器应用于场景的一部分

Opengl 如何将后期处理着色器应用于场景的一部分,opengl,opengl-es,Opengl,Opengl Es,我有以下渲染管道: [更改每帧的输入纹理]->[在更改纹理的基础上渲染的3D内容]->-> [后处理着色器]->[应用于输入纹理+3D内容的后处理合成纹理] 我希望实现以下目标: [更改每帧的输入纹理]->[在更改纹理的基础上渲染3D内容]+[应用于3D内容的后处理着色器]->[仅应用于3D内容的后处理合成纹理] 实现这一目标的最佳方式是什么 我正在考虑将3D内容渲染到屏幕外纹理(具有透明的非渲染部分),然后将后处理着色器应用到该纹理,然后在背景纹理的顶部渲染具有透明度的后处理纹理 有没有更好的

我有以下渲染管道:

[更改每帧的输入纹理]
->
[在更改纹理的基础上渲染的3D内容]
->->
[后处理着色器]
->
[应用于输入纹理+3D内容的后处理合成纹理]

我希望实现以下目标:

[更改每帧的输入纹理]
->
[在更改纹理的基础上渲染3D内容]+[应用于3D内容的后处理着色器]
->
[仅应用于3D内容的后处理合成纹理]

实现这一目标的最佳方式是什么

我正在考虑将3D内容渲染到屏幕外纹理(具有透明的非渲染部分),然后将后处理着色器应用到该纹理,然后在背景纹理的顶部渲染具有透明度的后处理纹理


有没有更好的办法?如果没有,如何使用alpha在纹理上进行渲染,然后在以前的纹理上进行合成?

如果后处理很简单,如白平衡或HDR,则可以首先渲染3D内容,应用后处理,然后在启用深度测试的情况下以适当的最大深度渲染背景纹理


如果后期处理更复杂,比如模糊或类似的东西,那么恐怕渲染到第二个纹理是唯一的解决方案。渲染到RGBA纹理非常简单,就像渲染到RGB纹理一样。只需确保在整个管道中使用预乘alpha,否则将无法正确合成纹理。渲染之前,请使用(0,0,0,0)颜色清除纹理