试图了解Open GL

时间:2013-02-13 10:09:09

标签: opengl-es

我正在阅读Apple提供的Open GL ES指南,但我不完全了解它并且有一个问题。如果你帮我理解,我将非常感激。在第28页,有关绘图的章节,它说明如下:

  

要正确创建帧缓冲区:

     
      
  1. 创建一个帧缓冲对象。
  2.   
  3. 创建一个或多个目标(渲染缓冲区或纹理),为它们分配存储,并将每个目标附加到   framebuffer object。
  4.   
  5. 测试帧缓冲区的完整性。
  6.   

我的问题是:在第2点,不应该说“创建一个或多个来源 ......”?正如我目前所理解的那样,帧缓冲区将在我的draw方法中呈现给屏幕。因此,如果我们通过将它们附加到帧缓冲区来指定我们想要渲染的图像,那对我来说是有意义的。显然,我误解了一些基本的东西,因为在我描述的内容中,目标是屏幕,其他一切都是源。

5 个答案:

答案 0 :(得分:2)

您的程序通过执行导致OpenGL将片段光栅化到帧缓冲区的操作,渲染到帧缓冲区。

但是,帧缓冲区不会在任何地方显示,除非您按照文档说明并将其发送给目标。

有点像这样(非常非常粗糙,不在我的头顶):

+----------+   +--------+   +---------------------+   +----------------------+
|draw calls|---|pipeline|---|pixels in framebuffer|---|pixels in renderbuffer|
+----------+   +--------+   +---------------------+   +----------------------+

答案 1 :(得分:2)

目标是正确的。帧缓冲区渲染到内存区域,以后将用于合成到屏幕(renderbuffer)或将用作辅助渲染过程中的纹理。

答案 2 :(得分:2)

帧缓冲附件首先是写入的目标,然后是读取的。请注意,当规范说“目标”时,它通常是正在处理或更改的活动对象,无论实际操作如何。

答案 3 :(得分:2)

  

显然,我误解了一些根本性的东西,因为在我描述的内容中,目标是屏幕,其他一切都是源。

是的,你从根本上误解了一些东西。当您想要将的内容渲染到屏幕而不是某些离屏图像时,可以使用Framebuffer对象。例如,texutre,或稍后进行后处理的某些图像。如果您只想渲染到屏幕,则不需要FBO。

  

因此,如果我们通过将它们附加到帧缓冲区来指定我们想要渲染的图像,那对我来说是有意义的。

没有。 一个帧缓冲对象不是图像内容的源,而是一个“画布”,一个接收器,你可以画画。或者更准确地说是实际画布的“框架”,其中目标是要绘制的画布。

答案 4 :(得分:1)

帧缓冲源与您渲染的内容无关。您可以将多个渲染目标附加到每个帧缓冲区并在它们之间切换。然而,这是你实际上并不需要的东西,它与渲染步骤本身无关,直到你使用多个传递或需要一些其他渲染来纹理化东西。

我会跳过OpenGL学习的这一部分,直接用VBO和着色器开始,此时只需使用一些模板作为帧缓冲区。以后你可能需要它们但不是现在。