每次我在 Google 上搜索有关 OpenGL 编程的文章时,我都会找到文章,但似乎都提到了着色器和缓冲区。那些是什么?你能解释一下其中的一些吗:
- 深度缓冲区
- 模板缓冲区
- 像素着色器
- 帧缓冲区
- ...?
我听说了其中的几个,但找不到完整的列表。什么是 OpenGL 中的着色器,什么是缓冲区?有人可以在我们使用它们时提供示例吗?
颜色缓冲区是具有指定内存布局的一些内部存储器,但在其他方面或多或少对您来说是不透明的,它表示图像。它保存有关图像中每个像素颜色的信息。您绘制/渲染到颜色缓冲区。在最近的硬件上,最新版本的 OpenGL 可以有不止一个颜色缓冲区,您可以使用它来提高一些特殊的渲染技术的效率。
深度和模板缓冲区与颜色缓冲区相同,只是它们保存(顾名思义)深度和模板信息而不是颜色。深度和模板通常组合成一个缓冲区(但不是必须的),一次不能有多个深度/模板缓冲区。
深度缓冲区通常用于在以非特定顺序渲染多个对象时解决过度绘制的歧义。只有最接近“你的眼睛”的一个片段幸存下来。模板缓冲区可用于特殊效果,例如屏蔽缓冲区的区域。
帧缓冲区是您将颜色缓冲区附加到并在其中绘制/渲染的东西,并且可以选择在屏幕上可见。总是至少有一个帧缓冲区,这是您在屏幕上看到的,但可能有任意数量。这是由自 3.0 版以来的核心功能的帧缓冲区扩展管理的。帧缓冲区通常也有单独的“前”和“后”缓冲区。当您渲染给另一个时,将向您显示一个。在适当的时候,缓冲区被翻转,所以你看不到闪烁。
一般来说,着色器是一个“程序”,OpenGL 代表您在其管道内在明确定义的时间对明确定义的数据执行以生成一些所需的效果。它通常在显卡上运行,但也可能部分或全部在 CPU 上执行。
像素着色器,历史上第一个可用的着色器(和命名器)为每个片段运行一次。它们采用一些定义的输入(例如光位置、法线)并产生一个输出,该输出随后经过深度测试,最后被写入颜色缓冲区或与颜色缓冲区混合。
顶点、几何或曲面细分着色器并不真正“着色”任何东西(它们转换和/或生成顶点和图元,后来变成片段),但它们继承了名称。
输入opengl shaders
谷歌,你就得到了着色器的答案。
第一个搜索结果: http ://en.wikipedia.org/wiki/GLSL
要更直接地列出每个着色器,请点击此处的链接: http ://en.wikipedia.org/wiki/Shader#Types_of_shaders
对于 OpenGL,您使用 GLSL 对着色器进行编程,使用 HLSL 进行 Direct3D。
这应该作为一般介绍。
关于另一个的一些快速说明(可能是简化):
深度缓冲区,也称为z-buffer,用于解决渲染时什么背后的问题。
帧缓冲区只是存储当前帧(屏幕/像素)的内存。
模板缓冲区有点复杂,可以以几种不同的方式使用。
出于介绍目的,谷歌在每个(维基百科)上的第一次点击为您提供了很好的服务:
http://en.wikipedia.org/wiki/Framebuffer
http://en.wikipedia.org/wiki/Stencil_buffer
http://en.wikipedia.org/wiki/Z-buffering
ETC