OpenGL渲染管线简介
作者:互联网
渲染管线(Rendering Pipeline),通俗地讲就是将提供给渲染系统的数据进行处理并渲染到屏幕上的一系列过程。
对于OpenGL,其管线主要分为以下几个过程:
1. 向OpenGL传入数据
OpenGL要求所有数据都储存在buffer objects里,而buffer objects就是由OpenGL管理的一块内存。注意,我们所编写的程序都是运行在内存的,对于OpenGL的C/S模型来说,OpenGL上下文就是其Server,而Server如何处理我们向其中传入的数据是我们不得而知的(由制造商的实现决定)。当我们完成了对于buffer的设置,我们就能请求OpenGL Server端来绘制图形,比如调用glDrawArray方法。
2. 顶点着色(Vertex Shading)
这个阶段处理的是顶点数据。我们知道,在OpenGL中,任何几何物体都是由点、线和三角形构成的,它们统称为图元(Primitives)。而图元又是由顶点构成的,所以顶点数据将被优先处理。顶点着色器只负责处理顶点和与顶点有关的数据,包括顶点坐标的空间变换、顶点颜色处理和其他对于顶点的特殊处理。顶点着色器每从顶点数据流中读取一个顶点就输出一个顶点。
3. 曲面细分着色(Tessellation Shading)
这个阶段不是必需的,主要实现对曲面进行进一步处理以使其更光滑等功能。
4. 几何着色(Geometry Shading)
这个阶段也不是必需的。与顶点着色器相比,几何着色器的操作对象是图元,并且不会保证图元读入数量和读出数量相等(因为这一阶段可以抛弃或生成图元,改变图元种类,取决于Shade编写者想要的功能)。
(P.S. 几何着色器是ShaderModel 4引入的,根据OpenGLWiki,如果几何着色器被激活,那么在几何着色之前还会有Early Primitive Assembly;并且结合微软D3D文档对于几何着色器的描述,几何着色器的输入其实是图元的顶点以及与该图元相邻的图元的顶点)
5. 图元装配(Primitive Assembly)
当我们到达这一阶段时,顶点数据以及顶点如何将装配为图元的相关信息将被传入OpenGL内部进行装配。
6. 裁剪(Clipping)
原始顶点处理完成后,将会有一些顶点落在视口(Viewport)之外,此时要将它们去除。这一步由OpenGL自动完成。
7. 光栅化(Rasterization)
光栅的主要任务就是将图元映射到屏幕上,它以图元为单位,决定哪些像素被图元覆盖。图元的顶点被优先确定在屏幕的某个像素上,然后通过算法绘制线段、进行颜色插值等一系列操作。
8. 片段着色(Fragment Shading)
片段(Fragment)就是储存在帧缓冲(Framebuffer)中的像素点。片段着色器决定了像素点的最终颜色以及其深度。当它认为某个片段不应该被绘制时,它可以进行片段丢弃。
9. 逐片段操作(Per-Fragment Operation)
片段最终被渲染到对应像素点前的最终操作。它对每一个片段进行操作,比如深度测试(depth test)、模板测试(stencil test)。在这个阶段完成之后,一帧的渲染图像就完成了。
标签:片段,OpenGL,简介,几何,顶点,图元,着色器,管线 来源: https://www.cnblogs.com/nanonano01482/p/16098197.html