-
首先OpenGL两大“圣经”镇楼,如果想学习OpenGL的小伙伴,可以入手红宝书或者蓝宝书其中的一本
1.png
一.语言简介
- OpenGL (Open Graphics Library) :开放图形库,是用于渲染2D以及3D图形的跨语言、跨平台的图形程序接口(API),提供给开发者去使用GPU的通道,主要用于处理Mac和Windows(PC端)。
- OpenGL ES (OpenGL for Embedded Systems): 实际上只是OpenGL的子集,针对移动设备和游戏主机等嵌入式设备设计,去掉了许多在以上设备中不必要的和性能低的API接口,平台主要用于苹果和安卓。
- DirectX:DirectX属于Windows上的一个多媒体处理框架,也只支持Windows不支持其他平台。当然它也可以处理图形,可以分为四大部分:显示、声音、输入以及网络。
- Metal:Apple在2018年为游戏开发者推出的新平台技术,相比于OpenGL ES,Metal在3D图形的处理提高了10倍的渲染性能,主要用于苹果端。
- OpenCV:广泛用于人脸识别以及人工智能,也是一个跨平台的语言。比如提供人脸识别的第三方公司Face++和OpenCV都基于此开发。
二、OpenES和Metal对比(iOS开发者应该关注)
-
2018年苹果在移动端推出了新的渲染框架Metal,之前苹果移动端设备图形渲染都是基于OpenGL ES封装上层框架,推出Metal后底层开始向Metal迁移,并可能在今后弃用OpenGL ES;
推出Metal原因:
1.对于苹果来说,OpenGL ES相当于一个第三方的框架,无法自定义以及定制需求和迭代,并且不可能将核心的渲染部分一直依托于一个第三方的框架;
2.借助Metal入口调用GPU做大量的并发运算 虽然苹果针对移动端推出了Metal,但不代表想学习OpenGL的小伙伴完全可以不理OpenGL ES,毕竟很多公司还是使用的OpenGL ES,而且学习过OpenGL ES后去学习Metal也会容易很多。
三、OpenGL中一些专业名词解释
上下文:在任何程序调用OpenGL API的时候都需要一个上下文,上下文相当于一个庞大的状态机,帮我们存储了渲染时的所需要的所有信息例如绘制的颜色、深度测试等信息
渲染:将图片、视频、按钮等数据绘制到屏幕中的过程称为渲染
顶点数组:呈现图形首先要画出图形轮廓,在计算机中图形轮廓由点组成,这些点的数据存在于内存中,这些数据称之为顶点数据。在OpenGL ES中,有3种类型的图元:点、线、三⻆形。而现在的做法是GPU提前分配⼀块显存,将顶点数据预先传⼊到显存当中。这部分的显存,就被称为顶点缓冲区(VertexBuffer)。
管线:在GPU处理图形数据是严格按照一个固定的顺序执行的,会经历一道一道工序且这个顺序无法打破。类似工厂的流水线。
固定管线:固定管线又可以叫做存储着色器,OpenGL中固定管线包含光照、坐标转换、裁剪等。无法自定义,只能生成系统拥有的模具。
可编程管线:跟固定管线不同,我们可以自定义成不同的模具。
着色器:相当于一个函数代码段,这些API供GPU使用,不同的着色器作用不同。
固定着色器:顾名思义,iOS系统提供的API,我们只能根据API调用节课,无法修改自定义。
自定义着色器:基于GLSL(OpenGL Shading Language)语言编写代码段(着色器);目前OpenGL中开放的可自定义着色器只有顶点着色器和片元着色器,其余均为固定着色器;
顶点着色器:用来处理顶点相关代码段称为顶点着色器,比如:顶点的位置确定、缩放、平移旋转换算等
片元着色器:用来处理每一个像素点的代码段称为片元着色器,例如:40 * 40像素的图片共有1600个像素点,那么每个像素点都要使用片元着色器调动GPU进行运算。值得一提的是GPU在进行运算是并行运算,所以不用担心效率问题
GLSL:OpenGL Shading Language,是一种语言用于自定义着色器的编写,来调动GPU做运算。
光栅化:光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了了两部分的⼯作。第⼀部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。
看到这里小伙伴们是不是有点晕,这里有一个着色器渲染流程的图片可以帮助我们理解
纹理:纹理可以理解为图片. 大家在渲染图形时需要在其编码填充图片,为了使得场景更加逼真.⽽而这里使用的图片,就是常说的纹理.但是在OpenGL,我们更加习惯叫纹理,而不是图片.
混合:当两个颜色不同的图层叠在一起时,混合部分的像素颜色需要通过混合算法重新运算。
变换矩阵:和线性代数的变换矩阵是同一个东西,主要做图形的旋转、平移以及缩放。
投影矩阵:⽤于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制。
-
OpenGL投影方式:有两种分别为正投影以及透视投影。
8.png