📜  OpenGL 渲染管线 |概述

📅  最后修改于: 2021-10-19 04:34:09             🧑  作者: Mango

渲染管线是 OpenGL 在渲染对象时所采取的一系列步骤。顶点属性和其他数据经过一系列步骤以生成屏幕上的最终图像。该流水线中通常有 9 个步骤,其中大部分是可选的,并且许多是可编程的。

openGL 生成图像的步骤序列:

  1. 顶点规范:在顶点规范中,列出定义图元边界的顶点的有序列表。除此之外,还可以定义其他顶点属性,如颜色、纹理坐标等。稍后这些数据被发送并由管道处理。
  2. 顶点着色器:上面定义的顶点规范现在通过顶点着色器。 Vertex Shader 是一个用 GLSL 编写的程序,用于操作顶点数据。顶点着色器的最终目标是计算每个顶点的最终顶点位置。顶点着色器对 GPU 处理的每个顶点执行一次(如果是三角形,它将执行 3 次)。因此,如果场景包含一百万个顶点,顶点着色器将为每个顶点执行一百万次。顶点着色器的主要工作是计算场景中顶点的最终位置。
  3. 镶嵌:这是一个可选的阶段。在这个阶段,图元被细分,即分成更平滑的三角形网格。
  4. 几何着色器:这个着色器阶段也是可选的。 Geometry Shader 的工作是获取一个输入图元并生成零个或多个输出图元。如果三角形带作为单个图元发送,几何着色器将可视化一系列三角形。几何着色器能够通过为单个输入输出多个图元来移除图元或细分它们。几何着色器还可以将图元转换为不同类型。例如,点图元可以变成三角形。
  5. 顶点后处理:这是一个固定的函数阶段,即用户对这些阶段的控制非常有限。这个阶段最重要的部分是Clipping 。裁剪会丢弃位于视域之外的图元区域。
  6. Primitive Assembly:这个阶段将顶点数据收集到一个简单的图元(线、点或三角形)的有序序列中。
  7. 光栅化:这是此流程中的重要一步。光栅化的输出是一个片段。
  8. 片段着色器:虽然不是必需的阶段,但 96% 的时间都使用它。这个用户在 GLSL 中编写的程序计算用户在屏幕上看到的每个片段的颜色。片段着色器为几何体中的每个片段运行。片段着色器的工作是确定每个片段的最终颜色。
  9. 每个样本操作:基于用户是否激活它们执行的测试很少。例如,其中一些测试是像素所有权测试、剪刀测试、模板测试、深度测试。

在这里查看使用 openGL 渲染一个简单的三角形。