图形渲染管线流程的几个具体步骤

No replies
Demi
Demi 的头像
Offline
Joined: 2017-03-07

1. 准备好顶点数据和顶点连通性数据。顶点数据包括顶点的位置、颜色、纹理坐标、法线等数据,而顶点连通性数据则是描述顶点之间如何连接组合的数据,如这边两个顶点是连成一条线,这边三个顶点组成一个三角形。

2. 将第一步获取的顶点数据进行处理,包括顶点位置变换,顶点光照计算,生成纹理坐标等操作,处理完后输出到下一步。(顶点着色器负责阶段)

3. 根据上面提供的顶点数据和顶点连通性数据,将点连成线,线连成面。把零零散散的顶点组装成一个一个的图元,并且将图元进行栅格化,即处理成一个一个的像素格子,并且决定了每个像素格子的位置,这就是我们说的片段。
被确定的除了片段的位置之外,还可能包含片段的颜色,OpenGL会根据图元各个顶点的颜色,纹理坐标进行插值,得出每个片段的颜色插值。这个阶段还会对不在视口范围中的内容进行裁剪。背面剔除操作也会在这个阶段执行。(几何着色器负责阶段,这个我们一般不会用到,因为一般不需要我们再去实现一套新的图元组装规则)

4. 对第三步输出的片段进行处理,包括对颜色处理,或者丢弃片段,雾化也是在这个阶段执行的。(片段着色器负责阶段)

5. 为即将呈现到屏幕上的内容进行最后的处理,即对每个片段进行一系列的测试:

  ○  裁剪测试,激活GL_SCISSOR_TEST时开启,判断是否在设定的裁剪窗口中,如是则通过,否则不渲染当前片段。
Alpha测试,激活GL_ALPHA_TEST时开启,判断当前片段的透明度是否符合glAlphaFunc设定的条件(如透明度大于0.5),如是则通过,否则不渲染当前片段。

  ○  模版测试,激活GL_STENCIL_TEST时开启,判断当前片段模版值与模版缓冲区中对应的模版值是否符合glStencilFunc()函数设定的条件,如是则通过,否则不渲染当前片段。

  ○  深度测试,激活GL_DEPTH_TEST时开启,用于判断片段的前后遮挡关系,判断当前片段的深度值和深度缓冲区中对应的值是否符合glDepthFunc()函数设定的条件,如是则通过,否则不渲染当前片段。

最后,如果测试都通过了的话,会根据当前的混合模式将片段更新到帧缓冲区里对应的像素中,当屏幕刷新时,帧缓冲区的内容会被渲染到屏幕上。这就是我们看到一个图像如何显示到屏幕上的整个过程。

摘自:夜色魅影

--电子创新网--
粤ICP备12070055号