1

我正在使用JOGL开发一个简单的 OpenGL 3D 图形引擎。现在,我已经实现了一个简单的渲染管道,它将场景渲染到 FBO 上,然后将其传递给着色器,将 FBO 的颜色纹理渲染到屏幕上,可以选择应用一些后期处理效果,例如模糊。

在不使用 FBO 的情况下,使用 JOGL 很容易实现美观的多重采样。例如,因为我在 Swing 中托管我的 GL 面板,所以我使用 aGLJPanel并像这样创建它,以启用多重采样:

GLCapabilities caps = new GLCapabilities(null);
caps.setSampleBuffers(true);
caps.setNumSamples(8);
GLJPanel gljp = new GLJPanel(caps);

这非常简单,并且会产生漂亮的结果。但是,当必须首先将几何图形绘制到 FBO 时,这并不是很有用。最好的方法是在 FBO 上附加一个 GL_TEXTURE_2D_MULTISAMPLE,渲染场景,然后在第二遍的片段着色器中执行多重采样。

尽管 JOGL 提供了一个相当广泛的FBObject类来帮助管理 FBO,但我没有找到一种方法让它渲染到多采样纹理(它只允许使用TextureAttachment对象,这些对象被硬编码为只能使用 TEXTURE_2D 资源)。因此,我只使用提供的 FBObject 作为骨架,但使用普通 gl.gl* 调用完成大部分工作。我知道这不是 hacky 或任何东西,也许一个“更清洁”的解决方案只是扩展TextureAttachment和创建一个专用于多采样纹理的类。

我只是想知道 - 我是否遗漏了什么,或者 JOGL 真的不支持具有多重采样纹理的 FBO?

4

1 回答 1

1

如果有人在寻找相同的答案,我实际上只是完全停止使用 FBObjects,我目前正在使用普通的旧gl.gl*命令来管理我的帧缓冲区(包括我的新延迟渲染器的 GBuffer)。

于 2013-06-28T20:36:17.633 回答