1

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

要正确创建帧缓冲区:

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

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

4

5 回答 5

2

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

是的,你从根本上误解了一些东西。当您不想将事物渲染到屏幕上而是渲染到某些屏幕外图像时,将使用 Framebuffer对象。例如纹理,或稍后被后处理的某些图像。如果您只想渲染到屏幕上,则不需要 FBO。

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

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

于 2013-02-13T11:58:39.447 回答
2

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

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

有点像这样(非常非常粗糙,而且我无法想象):

+----------+   +--------+   +---------------------+   +----------------------+
|draw calls|---|pipeline|---|pixels in framebuffer|---|pixels in renderbuffer|
+----------+   +--------+   +---------------------+   +----------------------+
于 2013-02-13T10:15:08.687 回答
2

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

于 2013-02-13T10:17:30.243 回答
2

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

于 2013-02-13T10:20:45.013 回答
1

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

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

于 2013-02-13T10:15:03.167 回答