图形API简介
1、OpenGL(Open Graphics Library)是一个跨语言、跨平台的编程图形程序接口,将计算机的资源抽象为一个个OpenGL对象,对这些资源的操作抽象为一个个的OpenGL指令
2、OpenGL ES(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、Pad和游戏而设计,去除了很多不必要和性能较低的API
3、Metal:Apple为游戏开发者推出的新的平台技术,该技术能够为3D图形提高10倍的渲染性能。Metal是Apple为解决3D渲染而推出的框架
App视图展示过程OpenGL、OpenGLES、Metal在任何项目中解决问题的本质就是使用GPU芯片来高效渲染图形成像
OpenGL涉及专有名词解释:
1、OpenGL上下文(context),上下文在开发者看来并不陌生,其实所谓上下文即一个非常庞大的状态机,保存了OpenGL中的各种状态,也是OpenGL执行的基础。无论在哪门语言中,OpenGL都是类似面向过程的C语言函数,本质上都是对OpenGL上下文这个庞大的状态机进行操作。因此通过对OpenGL指令的封装,是可以将OpenGL的相关调用封装成一个面向对象的API
问题:OpenGL上下文是一个庞大的状态机,那么切换上下文比如消耗更多的性能;但是不同的绘制模块也需要个字独立的空间。为了解决性能问题,可以在应用中分别创建多个不同的上下文,在不同线程中使用不同的上下文,上下文之间共享纹理、缓冲区等资源。这样的方案,会比反复切换上下文,或者大量修改渲染状态,更加合理
状态机可这么理解:
OpenGL可以记录自己的状态(如当前使用的颜色、是否开启了混合功能等)
OpenGL可以接收输入(比如调用其中的函数,接受到输入会改变自己的状态)
OpenGL可以进入停止状态,不在接收输入。在程序退出前,OpenGL总会先停止工作
2、渲染: 将图形/图像数据转换成2D空间图像的操作叫渲染(Rendering)
3、顶点数组VertexArray/顶点缓冲区VertexBuffer:顶点:指的是在绘制一个图像它的顶点位置数据。OpenGL中图形都是由图元组成。在OpenGLES中有3种类型的图元:点、线、三角形。顶点数据可以直接存储在GPU的内存中(顶点数组),顶点数据存储在GPU的显存中(顶点缓冲区)。顶点缓冲区性能更高,提前分配一块显存,将顶点数据传入到显存,使用的时候直接从显存中拿过来使用
4、位图 png/jpg等图片是压缩图片,如果要显示到屏幕上需要解压成位图(Bitmap),比如一个120*120像素的图,包含120*120=14400个像素点,而每个像素点有分别以RGBA的格式存储,所以实际的位图大小是14400*4 = 57600
5、管线 在OpenGL下渲染图形,就会经历一个一个节点,而这样的操作可以理解为管线(之所以称为管线,是因为显卡在处理数据的时候是按照一个固定顺序来的)
6、固定管线/可编程管线 固定管线及系统提供的固定API,开发者只能按照格式填充数据;而可编程管线是开发者可自定义编程模具(使用GLSL语法来驱使GPU),通过着色器程序将固定管线架构变为可编程渲染管线
7、着色器Shader (在渲染过程中必须有2种着色器:顶点着色器、片元着色器)
顶点着色器 用来处理顶点相关代码,有3个作用 ⓐ确定位置 ⓑ缩放/平移/旋转 ⓒ手机端显示3D
片元着色器 处理一个一个像素点颜色计算与填充(GPU并行运算);拓展使用场景:比如图形进行饱和度调整,可使用片元着色器进行一个一个像素点的修改
8、GLSL(OpenGL Shadeing Language),他们是图形卡在GPU上执行单一,开发人员写的最小的自定义程序。比如可编程管线,使渲染管线中不同层次具有可编程性(如:视图转换、投影转换)GLSL着色器分两部分:顶点着色器、片元着色器
9、光栅化
把顶点数据转换为片元的过程,具有将图转换为一个个栅格组成的图像的过程,片元中每个元素对应与帧缓存区中的一个像素。
光栅化其实是将几何图元转换为2D图形的过程。该过程包含两个部分工作ⓐ确定图形像素范围 ⓑ将颜色附着上去
10、纹理 纹理可以理解为图片
11、混合Blending 如果两个以上Layer叠加在一起,那么呈现出来的就是混合后的色值(像素的颜色将会和帧缓冲区中颜色附着上的颜色进行混合)
12、变换矩阵 图形发生平移、缩放、旋转就需要使用变换矩阵
13、投影矩阵 将3D坐标转换为二维坐标
14、渲染上屏 渲染缓冲区一般映射的是系统的资源。如果将图像直接渲染到窗口对应的渲染缓冲区,则可以将图像显示在屏幕上
问题:如果每个窗口只有一个缓存区,那么在绘制的过程中如果屏幕发生了刷新,那么可能显示出不完整的图像?如何解决呢?
15、交换缓冲区 常规的OpenGL程序至少有两个缓冲区。显示在屏幕上的叫屏幕缓冲区,未显示在屏幕上的叫离屏缓冲区,在一个缓冲区渲染完成后,通过将两个缓冲区数据进行交换,实现图像在屏幕上的显示。
由于显示器的刷新一般都是逐行进行的,因此为了防止交换缓冲区的过程中,屏幕上下区域的图像分别属于两个不同的帧,因此交换一般会等待显示器刷新完成的信号。这个信号被称作为同步垂直信号VSync。使用了双缓冲区和垂直同步技术之后,由于总是要等待缓冲区交换之后再进行下一帧的渲染,使得帧率 无法完全达到硬件允许的最高水平。为了解决这个问题,引⼊了三缓冲区技术,在等待垂直同步时,来 回交替渲染两个离屏的缓冲区,⽽垂直同步发生时,屏幕缓冲区和最近渲染完成的离屏缓冲区交换,实现充分利利⽤用硬件性能的目的
坐标体系
2D笛卡尔坐标
23D笛卡尔坐标(比2D多了Z轴)
3D投影方式:
正投影:所有多边形都是按同样相对大小来在屏幕上绘制的。线和多边形使用平行线来直接映射到2D屏幕上。适合蓝图、文本等二维图形
正投影透视投影:通过非平行线来把图形映射到2D屏幕上,有透视缩短的特点,更加贴近现实
透视投影
网友评论