【问题标题】:OpenGL - Buffer, shaderOpenGL - 缓冲区、着色器
【发布时间】:2012-06-15 12:16:45
【问题描述】:

每次我在 Google 上搜索有关 OpenGL 编程的文章时,我都会找到文章,但似乎都提到了着色器和缓冲区。那些是什么? 你能解释一下其中的一些吗:

  • 深度缓冲
  • 模板缓冲区
  • 像素着色器
  • 帧缓冲区
  • ...?

我听说过其中的几个,但找不到完整的列表。什么是 OpenGL 中的着色器,什么是缓冲区?有人可以在我们使用它们时提供示例吗?

【问题讨论】:

    标签: opengl graphics rendering


    【解决方案1】:

    颜色缓冲区是具有指定内存布局的内部内存,但在其他方面或多或少对您来说是不透明的,它表示图像。它保存有关图像中每个像素颜色的信息。您绘制/渲染到颜色缓冲区。在最近的硬件上,最新版本的 OpenGL 可以有不止一个颜色缓冲区,您可以使用它来提高一些特殊的渲染技术的效率。

    深度和模板缓冲区与颜色缓冲区相同,只是它们保存(顾名思义)深度和模板信息而不是颜色。深度和模板通常合并为一个缓冲区(但不必如此),一次不能有多个深度/模板缓冲区。
    当以非特定顺序渲染多个对象时,深度缓冲区通常用于解决过度绘制的歧义。只有最接近“你的眼睛”的一个片段幸存下来。模板缓冲区可用于特殊效果,例如屏蔽缓冲区的区域。

    帧缓冲区是您将颜色缓冲区附加到其中并在其中绘制/渲染的东西,并且可以选择在屏幕上可见。总是至少有一个帧缓冲区,这是您在屏幕上看到的,但可能有任意数量。这是由自 3.0 版以来的核心功能的帧缓冲区扩展管理的。帧缓冲区通常也有单独的“前”和“后”缓冲区。当您渲染给另一个时,将向您显示一个。在适当的时候,缓冲区会翻转,因此您看不到闪烁。

    一般来说,着色器是一个“程序”,OpenGL 代表您在其管道内在明确定义的时间对明确定义的数据执行以生成一些所需的效果。它通常在显卡上运行,但也可能部分或全部在 CPU 上执行。
    像素着色器,历史上第一个可用的着色器(和命名器)为每个片段运行一次。它们采用一些已定义的输入(例如光照位置、法线)并产生一个输出,该输出随后经过深度测试,最后被写入颜色缓冲区或与颜色缓冲区混合。
    顶点、几何或曲面细分着色器并不真正“着色”任何东西(它们转换和/或生成顶点和图元,这些顶点和基元后来变成片段),但它们继承了名称。

    【讨论】:

      【解决方案2】:

      在 google 中输入opengl shaders,您实际上会得到着色器的答案。

      第一个搜索结果: http://en.wikipedia.org/wiki/GLSL

      要更直接地列出每个着色器,请点击此处的链接: http://en.wikipedia.org/wiki/Shader#Types_of_shaders

      对于 OpenGL,您使用 GLSL 编写着色器,使用 HLSL 编写 Direct3D。

      这应该作为一般介绍。

      关于其他的一些快速说明(可能是简化):

      深度缓冲区,也称为z-buffer,用于解决渲染时什么背后的问题。

      帧缓冲区只是存储当前帧(屏幕/像素)的内存。

      Stencil 缓冲区有点复杂,有多种不同的使用方式。

      出于介绍目的,谷歌在每个网站(维基百科)上的首次点击都非常适合您:

      http://en.wikipedia.org/wiki/Framebuffer

      http://en.wikipedia.org/wiki/Stencil_buffer

      http://en.wikipedia.org/wiki/Z-buffering

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        相关资源
        最近更新 更多