【问题标题】:Separate Frame Buffer and Depth Buffer in OpenGL在 OpenGL 中分离帧缓冲区和深度缓冲区
【发布时间】:2012-11-23 19:38:51
【问题描述】:

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

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

【问题讨论】:

标签: opengl framebuffer depth-buffer


【解决方案1】:

Framebuffer Object 只不过是对图像的一系列引用。这些可以是Textures(例如2D 纹理的mipmap 层)或Renderbuffers(不能用作纹理)中的图像。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      相关资源
      最近更新 更多