【发布时间】:2015-10-22 05:25:49
【问题描述】:
这是我的情况:
我使用 MRT(多渲染目标)编写了一个小型延迟 3D 引擎来填充我的 G-Buffer(我的所有位置、法线、颜色和镜面反射纹理同时填充)。
此外,我已将一个渲染缓冲区对象 (RBO) 附加到我的 G-Buffer FBO,该对象已初始化为 GL_DEPTH_STENCIL_ATTACHMENT (GL_DEPTH24_STENCIL8)。所以在 G-Buffer 执行期间,我的 4 个纹理同时填充,渲染缓冲区同时填充模板和深度缓冲区。
我有两个问题:
- 是否可以出于任何原因将这个深度缓冲区用作片段着色器中的 sampler2D 统一变量,例如我可以用来在光照过程中计算某些东西(例如,从深度恢复视图空间中的顶点位置)?直接使用这个深度缓冲区会节省时间!
如果不可能:
- 是否可以在 MRT 中填充深度纹理(GL_DEPTH_COMPONENT 格式)?例如,是否可以使用 MRT 渲染技术填充深度纹理和颜色纹理? (我试过但没有成功,但也许我被抓得很厉害)。我是否需要分别使用 MRT 填充颜色缓冲区和深度缓冲区(此处需要两个渲染通道而不是一个)?
如果这不可能再次发生,你有什么建议?
非常感谢您的帮助!
【问题讨论】:
-
你到底遇到了什么问题?是否设法创建具有深度(+模板)内部格式的纹理并将其附加到您的 FBO 的深度(+模板)连接点?那么您是否设法在着色器中正常使用该纹理(绑定到 TU 并使用普通的
texture(depthSampler, coordinates);调用使用sampler2D进行采样)?