随着工作的逐渐深入,要理解GPU的工作原理,不学习3D图形技术是不行,自己也发现工作中调试GPU驱动比较困难的原因是由于自己图形图像方面的知识匮乏导致,对当代GPU的发展不了解,对可编程渲染管线,着色器等当代GPU的发展方向没有一个清晰的认识,我打算从openGL这套图形API开始学习图形图像的知识,帮助自己的工作顺利进行,也将图形图像作为自己长期发展技能。
openGL实现了渲染管线,它是一系列数据处理的过程,并将应用程序的数据转换成最终渲染的图像,openGL首先接收几何数据,并且将它输入到一系列的着色器阶段中进行处理,下图就是openGL的渲染管线示意图
下面将会按照渲染管线的流程,对各个过程进行解释
渲染过程中前几个阶段都是有关顶点,通过变换,或者旋转这些点,并在他们之前绘制线段,就能在平面的2D屏幕上创造出一个3D世界的错觉,或者通过投影矩阵将用于3D坐标转换成二维的屏幕坐标,实际的线条也将在二维屏幕坐标上进行绘制。如下图所示
实际绘制或填充每个顶点间的像素形成线段就叫做光栅化,如下图所示。
着色就是沿着表面改变颜色值,下图还是是渲染管线的示意图,这次把焦点放在着色器上,图中绿色表示可编程管线,黄色表示固定管线,蓝色部分表示四个着色阶段。还有另外一个独立的阶段计算着色阶段,在图中没有示意出。
向openGL着色器传递渲染数据的方法有三种:
下图是着色器的一个例子,通过改变立方体表面的颜色,能狗创建光线照射在一个红色立方体上的效果,是3D效果更加明显
纹理贴图就是沿着表面贴图,效果如下