0

在 OpenGL 中用作一种过滤器的标准程序是什么?当我说过滤器时,我的意思是边缘检测之类的东西。例如,假设我想将 SSAO 过滤器应用于 FBO。我是否将 FBO 和深度缓冲区绑定到纹理,然后在使用着色器的同时在相机前面绘制一个四边形,同时绘制到单独的 FBO?这就是我到目前为止一直在做的事情,但这有点烦人。我想知道大多数人使用的常见做法。我可能在这里遗漏了一些相当大的东西。我正在使用 LWJGL,所以如果这很重要,就不会出现过剩。

4

2 回答 2

2

这正是普遍的做法。将您的场景绘制成一个或多个纹理(通过使用 FBO),然后通过绘制纹理屏幕大小的四边形将这些纹理输入过滤着色器,将结果渲染到另一个纹理(通过使用另一个或相同的 FBO)或完成后直接进入默认(显示)帧缓冲区。

如今(使用 OpenGL 4.3 硬件和驱动程序)您还有另一种选择。您还可以为此类任务使用计算着色器。这基本上是一种特殊的着色器,与所有其他着色器阶段相比,它不是通常的图形管道的一部分,而是将通用 GPGPU 编程模型(从 CUDA 或 OpenCL 已知)暴露给 OpenGL,同时能够使用所有OpenGL 数据结构和功能,例如图像加载/存储或纹理过滤。(嗯,事实上,也可以使用 CUDA 或 OpenCL,它们允许与 OpenGL 互操作,但这相当麻烦,对于非常适合图像过滤等图形域的任务来说不值得。但是计算着色器具有零学习和互操作性开销使其成为可用的替代方案。)

于 2013-05-07T07:44:54.180 回答
1

这就是你的做法,绘制屏幕大小的四边形。您需要告诉 OpenGL 您要过滤屏幕的哪个部分,并且由于 OpenGL 是一个光栅化器,它需要光栅化该部分以便知道将什么输入片段着色器,因此是四边形。

于 2013-05-07T05:56:45.617 回答