OpenGL
OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。
OpenGL怎么工作
OpenGL被当作客户端-服务器系统来实现的,应用程序是客户端,图形硬件厂商提供的OpenGL实现是服务器。客户端程序需要调用OpenGL的接口实现3D渲染,那么OpenGL命令和数据会缓存在内存中,在一定条件下,会将这些命令和数据通过CPU时钟发送到显存,在GPU的控制下,使用显存中的数据和命令,经过渲染管道完成图形的渲染,并将结果存入帧缓冲区中,帧缓冲区中的帧最终会被发送到显示器上,显示出结果。
渲染管道示意图
1、顶点处理:把一个单独的顶点输入顶点着色器,顶点着色器主要的目的是把3D坐标转为另一种3D坐标,OpenGL仅当3D坐标在3个轴(x、y和z)上都为-1.0到1.0的范围内时才处理它。所有在所谓的标准化设备坐标(Normalized Device Coordinates)范围内的坐标才会最终呈现在屏幕上(在这个范围以外的坐标都不会显示)。
2、图元装配:以顶点着色器的输出的顶点作为输入,装配成对应的图元(OpenGL ES 只支持三种图元,分别是顶点、线段、三角形,复杂的图形得通过渲染多个三角形来实现)。
3、处理图元:把上一步输出的图元输入到几何着色器,几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。
4、光栅化:把图元映射为最终屏幕上相应的像素,会裁剪超出视图外的像素(为了提高效率),最终生成片段。
5、处理片段:将片段输入到片段着色器,片段着色器的主要目的是计算一个像素的最终颜色(滤镜处理的地方)。
6、测试及混合:这个阶段检测片段的对应的深度值和模板值,用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。
抖音滤镜实践
为了将上面的内容更好的串联起来,今天我们来实践一个经典的抖音滤镜——抖动。
以上都是试读,更多精彩内容查看:https://xiaozhuanlan.com/topic/8203157694