【问题标题】:Trying to understand Open GL试图理解 Open GL
【发布时间】:2013-02-13 22:27:22
【问题描述】:

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

正确创建帧缓冲区:

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

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

【问题讨论】:

    标签: opengl-es


    【解决方案1】:

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

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

    有点像这样(非常非常粗暴,我想不通):

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

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

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 2010-09-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多