opengl 入门

154 阅读2分钟

渲染管线

三角形渲染过程 OpenGL图形流水线:主机程序用顶点数组填充OpenGL管理的内存缓冲区; 这些顶点被投影到屏幕空间中,组装成三角形,然后栅格化为像素大小的片段。 最后,为片段分配颜色值并绘制到帧缓冲区。 现代GPU通过将“项目放入屏幕空间”和“分配颜色值”阶段委托给称为着色器的程序来获得灵活性。

1. vertex data 指定顶点数据

顶点的数据(主要是顶点属性:position(位置), normal(法线), color(颜色), 和 texture coordinates(纹理坐标))为渲染管线的输入,具体来说,为顶点数组。

2. vertex shader 顶点着色器

GPU首先从顶点阵列中读取每个选定的顶点,然后通过顶点着色器运行该程序,该程序将一组顶点属性作为输入,然后输出一组新的顶点属性, 顶点着色器至少会计算屏幕空间中顶点的投影位置。 顶点着色器还可以生成其他变化的输出,例如颜色或纹理坐标。

3. shape assembly图元装配

大多数情况下装配的是三角形图元。 在这个过程中GPU连接投影到屏幕空间的顶点以形成三角形。 它通过按元素数组指定的顺序获取顶点并将其分组为三个一组来实现此目的。 可以用几种不同的方式对顶点进行分组:

  1. 将每三个元素作为一个独立的三角形
  2. 制作一个三角形条(strip),重用每个三角形的最后两个顶点作为下一个的前两个顶点
  3. triangle fan,将第一个元素连接到后面的每一对元素

4.光栅化

把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。

5.片段着色器

片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。然后将其绘制到帧缓冲区中。 常见的片段着色器操作包括纹理映射和照明。 由于片段着色器针对绘制的每个像素独立运行,因此可以执行最复杂的特殊效果。