1

在 DirectX 中,您可以拥有单独的渲染目标和深度缓冲区,因此您可以绑定渲染目标和深度缓冲区,进行一些渲染,移除深度缓冲区,然后使用旧的深度缓冲区作为纹理进行更多渲染。

你会如何在opengl中解决这个问题?据我了解,您有一个包含颜色缓冲区和可选深度缓冲区的帧缓冲区对象。我不认为我可以同时绑定多个帧缓冲区对象,我是否必须在每次帧缓冲区对象更改时重新创建它(可能是一帧几次)?普通的opengl程序如何做到这一点?

4

2 回答 2

6

帧缓冲区对象只不过是对图像的一系列引用。这些可以是纹理中的图像(例如 2D 纹理的 mipmap 层)或渲染缓冲区(不能用作纹理)。

没有什么能阻止你组装一个 FBO,它使用纹理图像作为颜色缓冲区,使用纹理图像作为深度缓冲区。以后也没有什么可以阻止您(只要您在执行此操作时没有渲染到该 FBO)从纹理中采样作为深度纹理。FBO 不会突然独占这些图像或其他东西。

很可能,发生的事情是您误解了 FBO 和 OpenGL 的Default Framebuffer之间的区别。默认帧缓冲区(即:窗口)是不可更改的。您不能将它的深度缓冲区用作纹理或其他东西。你用 FBO 做什么是你自己的事,但是 OpenGL 不会让你以同样的方式使用它的默认帧缓冲区。

于 2012-11-23T20:30:13.990 回答
1

您可以将多个渲染目标绑定到单个 FBO,这应该是诀窍。此外,由于 OpenGL 是一个状态机,您可以随时更改绑定和目标数量。

于 2012-11-23T20:22:36.493 回答