前言
OpenGL ES2.0之前是固定管线绘制图形,2.0之后开始了可编程的绘制管线。所谓固定管线即系统只提供API给程序开发中调用,我们传递参数进去,然后就能得到一个图形;2.0之后加入了一些操作步骤,允许程序员对渲染过程进行可控操作,进入了可编程时代。
OpenGL 就是将三维坐标物体转换成屏幕上二维图像。
名词介绍
之所以为名词介绍而不是解释,因为怕我自身的理解错误而误导了大家,固只是起个抛砖引玉的作用。
- 渲染:就是将现实中的三维图形、图像在计算机屏幕上显示出来,说直白点就是将现实中的3D模型在计算机的2维坐标上画出来。
- 渲染管线:也称为渲染流水线,指生成图像的过程就像工厂的生产流水线型般,你只要按照流水线上工序一步一步进行就能生成图像。管线这个翻译确实让人很费解。
- 光栅化:也叫像素化,就是指将3维模型转化到屏幕上显示的过程。屏幕上的显示的画面都是由像素组成,而3维物体都是点线面构成的,让点线面变成屏幕上显示的像素,就是光栅化。
- 顶点数据:由于OpenGL只能画点、线、三角形。 我们画一个三角形时需要先画其3个顶点,每个顶点有其坐标和颜色等值, 这些数据被用来描述一个点,这个点就是顶点数据。
- 着色器:我们画三角形时先画它的3个顶点,然后将3个点首尾连起来就形成了三角形。计算机从哪个坐标点开始画,如何画,以及给三角形区域如何涂颜色,就需要有段小程序来控制。这段小程序就是着色器,着色器就是2.0之后加入的,让程序员可以自己控制画图形的编程程序。
- 顶点着色器、片元着色器:着色器主要有顶点着色器和片元着色器。顶点着色器告诉电脑如何处理顶点数据(如顶点的坐标、颜色等);片元着色器就是处理光、阴影、遮挡、环境等对物体表面的影响,这两着结合就形成了一幅图像。着色器编程就是允许开发者用我们自己的写的着色器替换系统默认的,从而可以更加细致的控制图像的生成。
图像渲染过程
我们借用下一张经典的图来说明图像渲染的过程:
渲染流程.png
如图所示:我们拿到一组3D坐标作为输入数据后,通过顶点着色器、像素化、片元着色器后就显示出一副图像。
蓝色的部分代表我们可以自定义的着色器,可编程绘制管线即体现在此。