相关图形API简介
1.OpenGL (Open Graphics Library)是⼀个跨编程语⾔、跨平台的编程图形程序接⼝,它将计算机的资源抽象称为⼀个个OpenGL的对象,对这些资源的操作抽象为⼀个个的OpenGL指令。
2.OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的⼦集,针对⼿机、PDA和游戏主机等嵌⼊式设备⽽设计,去除了许多不必要和性能较低的API接⼝。
3.Metal: Apple为游戏开发者推出了新的平台技术Metal,该技术能够为 3D 图像提⾼ 10 倍的渲染性能.Metal 是Apple为了解决3D渲染⽽推出的框架
4.DirectX 是由很多API组成的,DirectX并不是⼀个单纯的图形API. 最重要的是DirectX是属于Windows上⼀个多媒体处理API.并不⽀持Windows以外的平台,所以不是跨平台框架. 按照性质分类,可以分为四⼤部分,显示部分、声⾳部分、输⼊部分和⽹络部分。
OpenGL名词解析
OpenGL 上下⽂(context)
OpenGL上下文是一个非常大的状态机,保存了OpenGL的各种状态,是OpenGL指令执行的基础,可以把它理解成一个大的结构体。
OpenGL 状态机
状态机描述了一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动。或者说,状态机是一种行为,说明对象在其⽣命周期中响应事件所经历的状态序列以及对那些状态事件的响应。
因此具有以下特点:
1.有记忆功能,能记住其当前的状态。
2.可以接收输⼊,根据输入的内容和⾃己的原先状态,修改⾃己当前状态,并且可以有对应输出。
3.当进⼊特殊状态(停机)的时候,便不再接收输入,停⽌工作。
渲染
将图形/图像或图像数据转换成3D空间图像的操作,也可以理解为数据可视化的操作。
顶点数组/顶点缓冲区
顶点就像是图像的骨架,想要绘制图形,就要先确定顶点的位置,顶点存储在内存中的位置叫做顶点数组。而相比较内存而言,显存的性能更高,因此我们也可以提前分配一块⼀块显存,将顶点数据预先传⼊到显存当中。这部分的显存,就被称为顶点缓冲区。
管线
在OpenGL下绘制图形,都是按照一个固定的顺序来执行,就像流水线一样,这个顺序不能被打破。
管线又分为固定管线和可编辑管线。
• 固定管线又叫存储着色器,它的内部已经固化了一套完整的渲染流程,因此不需要也不允许你自己去定义顶点渲染和像素渲染的具体逻辑,只需要调用相关的API就可以实现功能。
• 可编辑管线则必须由开发者自行实现渲染流程,否则无法绘制出最终的画面。开发者可以根据自己的具体需要来编写顶点渲染和像素渲染中的具体逻辑,可最大程度的简化渲染管线的逻辑以提高渲染效率。当然也不是管线中的每一步流程都可以自定义实现,直到OpenGLES 3.0,依然只支持顶点着⾊器和⽚源着⾊器这两个最基础的着⾊器这两步的自定义。
着色器程序shader
着色器是OpenGL的灵魂,它可以控制GPU来运算,常见的着色器主要有顶点着色器(VertexShader),片源着色器 (FragmentShader),几何着⾊器 (GeometryShader),曲面细分着⾊器(TessellationShader)。直到 OpenGLES 3.0,依然只支持顶点着⾊器和⽚源着⾊器这两个最基础的着⾊器,所以,开发中,我们只会用到顶点着色器和片源着色器。
OpenGL在处理shader时,和其他编译器⼀样。通过编译、链接等步骤,⽣成了着⾊器程序(glProgram),着⾊器程序同时包含了顶点着⾊器和⽚段着⾊器的运算逻辑。在OpenGL进⾏绘制的时候,⾸先由顶点着⾊器对传⼊的顶点数据进⾏运算。再通过图元装配,将顶点转换为图元。然后进⾏光栅化,将图元这种⽮量图形,转换为栅格化数据。最后,将栅格化数据传⼊⽚段着⾊器中进⾏运算。⽚段着⾊器会对栅格化数据中的每⼀个像素进⾏运算,并决定像素的颜⾊。
顶点着⾊器:OpenGL中⽤于计算顶点属性的程序,当顶点要进行旋转、平移、投影等变换操作时,就需要顶点着色器来处理。
片元着色器:OpenGL中⽤于计算⽚段(像素)颜⾊的程序,对图形中每个像素进行计算与填充。
GLSL(OpenGL Shading Language)
OpenGL的着色语言,是用来着色编程的语言。即对顶点着色器和片源着色器的代码编写。
光栅化Rasterization
是把顶点数据转换为⽚元的过程,在顶点着色器和片源着色器中间执行,具有将图转化为⼀个个栅格组成的图象的作⽤,也可以理解为是⼀种将⼏何图元变为⼆维图像的过程。
纹理
纹理可以理解为图⽚。大家在渲染图形时需要在其编码填充图片,为了使得场景更加逼真。⽽这里使⽤的图片,就是常说的纹理。但是在OpenGL,我们更加习惯叫纹理,而不是图片。
混合
在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜色进行混合,混合的算法可以通过OpenGL的函数进行指定。常用的混合方程式为Cf=(Cs*S)+(Cd*D),其中,Cf是最终计算产生的颜色,Cs是源颜色,Cd则是目标颜色,S和D分别是源和目标混合因子。
变换矩阵(Transformation)
图形想发生平移,缩放,旋转变换.就需要使用变换矩阵。
投影矩阵Projection
⽤于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进⾏绘制。
渲染上屏/交换缓冲器
OpenGL在绘制图元时,先是在一个缓冲区中完成渲染,然后再把渲染结果交换到屏幕上。我们把这两个缓冲区称为前颜色缓冲区(屏幕)和后颜色缓冲区。在默认情况下,OpenGL命令是在后颜色缓冲区进行渲染的。