OpenGL管线流程

前面把每个可编程阶段的着色器简单的学习了解了一下,这次就整理一下整个管线流程和各个着色器的作用,可能有遗漏,毕竟刚学几天(后面再学的时候要不再来补充下?如果我想得起来的话)

管线流程大概如下图

由顶点数据从CPU处理完毕,提交到OpenGL的顶点着色器中,整个管线流程就开始了

  • 顶点着色器:它是OpenGL第一个可编程阶段,也是管线中唯一的必需阶段,再运行该着色器之前,会有一个顶点获取的固定函数阶段,该阶段自动向顶点着色器进行输入。顾名思义,这个着色器就是处理顶点的,有顶点才知道从哪开始绘制
  • 细分曲面:它是将高阶基元(贴片、多个四边形、三角形、线)分解为许多更小、更简单的基元(点、线、三角形)的渲染过程 。包含了三个阶段:细分曲面控制着色器固定函数细分曲面引擎细分曲面评估着色器
    • 细分曲面控制着色器:从顶点着色器获取输入数据,确定即将发送到细分曲面引擎的细分曲面级别,以及生成数据发往细分曲面评估着色器,它会在细分曲面开始的时候运行
    • 细分曲面引擎:是OpenGL管线的固定功能部分。主要接收以贴片为代表的高阶面并将这些面分解为更简单的基元,并生成大量的顶点,用来表示其生成的基元,并将其传递给细分曲面评估着色器
    • 细分曲面评估着色器:会对细分曲面单元产生的每个顶点运行调用。如果细分曲面级别较高,则会运行很多次,该着色器主要实现直通细分曲面,也就是细分曲面的输出贴片与原始传入贴片形状完全相同
  • 几何着色器:几何着色器会对每个基元运行一次,可以访问构成该处理基元的所有输入顶点数据。它包含EmitVertex()EndPrimitive()两个函数,可间接生成顶点发送到基元装配光栅化,还有一个特殊点在于可以改变管线中间基元模式
  • 基元装配:属于管线固定功能部分,即将点聚合为线和三角形
  • 裁剪:简单的说就是判定基元是否在可显示区域(窗口或者较小的视口),基元中被判定为潜在可见的部分会被发送到光栅器中
  • 光栅化:判断哪些片段可以被线或者三角形等基元覆盖的过程
  • 片段着色器:它是OpenGL管线中最后一个可编程阶段,它负责确定各个片段的颜色,然后将片段发送到帧缓存,以便合成到窗口中;它的输入和其他着色器阶段的输入有一些不同,OpenGL会在渲染的基元中进行插值
  • 帧缓存:它是管线中的最后一个阶段。表示屏幕的可见内容,以及用于存储颜色外每个像素值的其他内存区域。

管线流程中各个阶段就大概说明了一下,接下来要补数学了,向量、矩阵、空间转换、投影(哭了)

猜你喜欢

转载自blog.csdn.net/dl15600383645/article/details/127803202