图形API了解
在我们进行图形化开发的时候经常会使用图形API进行开发,首先我们对市面上的图形API进行一些简单的介绍。
- OpenGL全称为Open Graphics Library,是⼀个跨编程语⾔、跨平台的编程图形程序接⼝,它将计算机的资源抽象称为⼀个个OpenGL的对象,对这些资源的操作2抽象为⼀个个的OpenGL指令。
- OpenGL ES全称为OpenGL for Embedded Systems,是 OpenGL 三维图形 API 的⼦集,针对⼿机、PDA和游戏主机等嵌⼊式设备⽽设计,去除了许多不必要和性能较低的API接⼝。
- DirectX是由很多API组成的,DirectX并不是⼀个单纯的图形API. 最重要的是DirectX是属于Windows上⼀个多媒体处理框架.并不⽀持Windows以外的平台,所以不是跨平台框架. 按照性质分类,可以分为四⼤部分,显示部分、声⾳部分、输⼊部分和⽹络部分。
- Metal,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D 图像提⾼ 10 倍的渲染性能.Metal 是Apple为了解决3D渲染⽽推出的框架。
![](https://img.haomeiwen.com/i10153078/9fc0ca8969113dc8.jpeg)
-
TIPS:
OpenGL ES是OpenGL的子集,所以OpenGL ES相对OpenGL删减了一切低效能的操作方式,有高性能的决不留低效能的,即只求效能不求兼容性(和苹果的作风类似)。在 MacOS 10.14 的文档中,苹果表示使用 OpenGL 和 OpenCL 构建的应用还可以继续在 macOS 10.14 中运行(但是即使 macOS 支持 OpenGL ,其内置版本依然是 8 年前发布的 OpenGL 3.3 ,而不是去年发布的 4.6)。不过苹果表示,这些“遗留技术”并不推荐使用。所以,所有使用 OpenGL 的游戏和应用建议转向 Metal ;同样,使用 OpenCL 进行计算任务的应用也建议采用 Metal 和 Metal Performance Shaders 。很明显,苹果此举是想要大力推广 Metal 图形技术,来替换掉“古老”的 OpenGL 接口和 OpenCL 接口。
![](https://img.haomeiwen.com/i10153078/005afac58a268c3c.jpg)
图形API用处
- 游戏开发中的游戏场景/人物渲染
- 音视频开发中,对于视频解码后的渲染
- 地图开发
- 动画绘制
- 滤镜
OpenGL专业名词解析
-
上下文(Context) 可以理解为状态机。OpenGL本身就是一个巨大状态机。而状态机顾名思义就是用来保存当前程序的状态,在程序中初始化一次后就不需要再次初始化,下次调用的时候直接获取就可以。
由于OpenGL上下⽂是⼀个巨⼤大的状态机,切换上下文往往会产生较⼤的开销,但是不同的绘制模块,可能需要使⽤完全独立的状态管理。因此,可以在应⽤程序中分别创建多个不同的上下文,在不同线程中使⽤不同的上下文,上下⽂之间共享纹理、缓冲区等资源。这样的方案,会⽐比反复切换上下⽂,或者⼤量修改渲染状态,更加合理高效。
注意:在每次创建新的上下文之前,需要清除缓存,以免以前的状态影响新创建的上下文 -
渲染(Rendering)将图形/图像数据转换成2D空间图像操作叫做渲染。通俗的讲,就是将图片、视频等绘制到屏幕的过程
-
顶点数组( VertexArray )和顶点缓冲区(VertexBuffer)要弄清顶点数组,首页要知道顶点数据,在OpenGL ES中,有3种类型的图元:点、线、三⻆形。例如,一个三角形,它的三个顶点就称之为顶点数据,顶点数据就是描述一个图形顶点坐标的数据。
顶点数组( VertexArray )和顶点缓冲区(VertexBuffer)就是保存这些数据的地方。顶点数组是将顶点数据保存在内存中;为了提高性能,提前分配⼀块显存,提前分配⼀块显存,将顶点数据预先传⼊到显存当中。而这部分显存则被称为 顶点缓冲区 -
管线类似于一条流水线,程序按规划好的流程进行执行,而这个流程就被称为管线
-
固定管线就是封装好的管线,只能对参数进行修改,内部程序无法修改
-
着色器(Shader)通俗来说就是一个方法或者一个函数,只不过是供GPU调用。OpenGL在处理shader时,和其他编译器⼀样。通过编译、链接等步骤,⽣
成了着⾊器程序(glProgram)。常⻅的着⾊器主要有顶点着⾊器VertexShader,⽚段着⾊器(FragmentShader)/像素着⾊器(PixelShader),⼏何着⾊器(GeometryShader),曲⾯细分着⾊器(TessellationShader)-
固定着色器跟固定管线一样,由OPenGL提供,程序员只能修改参数。
-
自定义着色器跟固定管线相反,可以由程序员自己用GLSL语言来编写代码段。即使到了OpenGL 3.0时,仍然只有两个着色器可以自定义,分别为顶点着色器,片元着色器。
-
顶点着色器(VertexShader) 是用来处理顶点相关的代码。 顶点着色器可以用来进行下面几个操作:1.确定位置,通过顶点坐标,可以确定一个图形的位置,以及形状;2.对图形进行旋转、缩放、移动等操作;3.对3D图形数据进行投影换算,从而变成2D图形,展示在屏幕上
-
片元着色器(FragmentShader) 片元着色器也叫像素着色器,当一个图形通过顶点着色器固定好位置及大小后,图形就变成了一个个的像素点。 而片元着色器就是对每个像素点进行颜⾊计算和填充。 片元着色器是调用GPU,所以是并行运算,可以轻松的搞定数据量较大的运算。
-
-
GLSL(OpenGL Shading Language)OpenGL调用GPU工作所用到的语言就是GLSL语言,GLSL的着⾊器代码分成2个部分:Vertex Shader(顶点着⾊器)和Fragment(⽚元着⾊器)。
-
光栅化(Rasterization)光栅化就是把顶点数据转换为⽚元的过程。光栅化分为2个过程。
1.确定图形在屏幕中的位置,即定点坐标
2.将颜色渲染到图形中 -
纹理本质上是一张图片,但是和我们平常所看到的png、jpg等格式的图片不同,png、jpg是压缩好的图片。 在 OpenGL中,png、jpg会被解压成.tga格式的图片,称之为纹理,而且OpenGL ES中,压缩图会被解压成位图,就变成了纹理。
-
混合(Blending)两个透明度不为1的图形进行叠加,会造成造成颜色混合,此操作称之为混合。混合会造成离屏渲染,消耗性能。
-
变换矩阵例如图形想发⽣平移,缩放,旋转变换.就需要使⽤变换矩阵。
-
投影矩阵⽤于将3D坐标转换为⼆维屏幕坐标,实际线条也将在⼆维坐标下进⾏绘制
网友评论