每次我在谷歌上搜索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 缓冲区,用于解决渲染时背后的问题。
帧缓冲区只是存储当前帧(屏幕/像素)的内存。
模板缓冲区有点复杂,以几种不同的方式使用。
出于介绍目的,谷歌在每个(维基百科)上的首次点击在以下方面为您提供了很好的服务:
http://en.wikipedia.org/wiki/Framebuffer
http://en.wikipedia.org/wiki/Stencil_buffer
http://en.wikipedia.org/wiki/Z-buffering
等