OpenGL学习(二)OpenGL ES 2.0渲染管线流程

OpenGL ES 2.0 渲染管线流程

整个渲染流程如下图:
OpenGL学习(二)OpenGL ES 2.0渲染管线流程_第1张图片
客户端程序通过调用OpenGL接口,将顶点、着色器程序、纹理以及其他GL参数状态传入OpenGL服务器端;当客户端调用渲染命令时OpenGL对输入的图元逐一执行渲染管线的每个阶段;把每个像素的颜色写入帧缓冲中。最后,视窗系统通过帧缓冲的颜色显示在屏幕上。

下面逐一介绍每个阶段:
注意:
顶点着色器和片段着色器是可编程部分,其余阶段都是由固定的GL指令完成。

顶点数组

  • 绘制时,会把每个图形转换为一组图元;每个图元都是一个点或者线段或者三角形;每个图元由一个或者多个顶点组成;例如,一个顶点可以定义一个点、一个三角形的一个角;
  • 每个顶点包含的数据有:顶点坐标、颜色、法向量、纹理坐标等;这些相关信息构成顶点数组,这些数据被上传到OpenGL服务器会就可进行绘制了。

(一)、顶点着色器

  • 顶点着色器是一段代码,由程序员提供并在CPU 进行执行;使用顶点数据来计算出该顶点的坐标、颜色、光照、纹理坐标等。每个顶点进行一次单独的计算
  • 顶点着色器的重要任务:执行顶点坐标变换
  • 顶点坐标变换做了什么:对本地坐标进行模式视图变换,将本地坐标系的坐标值转换为裁剪坐标系的坐标值。
    OpenGL学习(二)OpenGL ES 2.0渲染管线流程_第2张图片

(二)、图元装配

图元装配阶段,顶点坐标会经过多个坐标系的变换;过程如下:

a. 视椎体裁剪:向顶点着色器传入一个视图模型变换矩阵,得到裁剪坐标系

什么是裁剪坐标系?

裁剪坐标系被定义在一个视锥体的空间中;那视锥体又是什么呢?他由6个平面构成:近平面、远平面、左平面、右平面、上平面、下平面。处于该视椎体以外的图元将被丢弃;Director中的setProjection方法定义了视锥体:视锥体的结构+观察点的位置;该图元与视锥体的6个面进行相加,产生新的图元;

  • gluPerspective 来定义视锥体的结构
  • gluLookAt 来定义观察点的位置

b. 透视分离: 被视锥体裁剪后的顶点坐标经过透视分离投影到屏幕上或者视口上。这些坐标的范围是[0,1]

c. 视口变换:规则化的坐标经过视口变换转换为屏幕坐标;
规则化坐标(x,y,z) ——> 屏幕坐标(x,y,w,h)其中(x,y) 定义视口在屏幕左下角的位置;(w,h)定义视口的大小,单位均为像素

(三)、光栅化

通过(二)的图元配置,所有3D图元已经被转换为2D上的图元。光栅化要把2D图元转换为一系列片段,并计算每个片段的位置;在下一阶段中,片段着色器程序根据以上计算的位置对每个片段进行着色;注意:每个片段执行一次着色器程序;是并行执行的

你可能感兴趣的:(OpenGL学习(二)OpenGL ES 2.0渲染管线流程)