OpenGL/OpenGL ES专业名词解析

1、 图形API简介

1.OpenGL (Open Graphics Library)是一个跨编程语⾔言、跨平台的编程图形程序接⼝口,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为⼀一个个的OpenGL指令。

2.OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的⼦子集,针对⼿手机、 PDA和游戏主机等嵌⼊入式设备⽽而设计,去除了了许多不不必要和性能较低的API接⼝口。

3.DirectX 是由很多API组成的,DirectX并不不是⼀一个单纯的图形API. 最重要的是DirectX是属于Windows上⼀一个多媒体处理理框架.并不不⽀支持Windows以外的平台,所以不不是跨平台框架. 按照性质分类,可以分为四⼤大部分,显示部分、声⾳音部分、输⼊入部分和⽹网络部分.

4. Metal: Apple为游戏开发者推出了了新的平台技术 Metal,该技术能够为 3D 图像提⾼高 10 倍的渲染性能.Metal 是Apple为了了解决3D渲染⽽而推出的框架

2、 专业名词解析

1.OpenGL 状态机

状态机是类似于一种机器。类似于一个产品进行多次加工中,其每一次加工中各种状态及其转换的过程。例如A->A1->A2->A3 可以简单理解为就是一个面向过程、记录状态的一个机器。

特点:记录当前状态、可以根据输入内容及机器原来的状态,修改当前状态,输入对应的产品、停机状态,不再接受输入,停止工作。

2、OpenGL 上下⽂文 ( context )

在应用调动任何openGL指令前,都会创建一个openGL的上下文。这个上下是一个大的状态机,保存opengl的各种状态,这是openGL运行的基础。

openGL的函数是类似于C的面向过程的语言,本质上都是对OpenGL上下文这个庞大的状态机中的某个状态或者对象进⾏操作。通过对OpenGL指令的封装,是可以将OpenGL的相关调⽤用封装成为一个⾯向对象的图形API的。由于OpenGL上下⽂文是⼀一个巨⼤大的状态机,切换上下⽂文往往会产⽣生较⼤大的开销,但是不同的绘制模块,可能需要使⽤用完全独立的状态管理。因此,可以在应用程序中分别创建多个不同的上下⽂文,在不不同线程中使⽤用不不同的上下文,上下文之间共享纹理理、缓冲区等资源。这样的方案,会⽐比反复切换上下文,或者大量修改渲染状态,更加合理高效的。

3、Render 渲染

将图形/图像数据转换成2D空间图像操作叫做渲染

4、 顶点数组和顶点缓冲区

顶点数组就是图片的骨架,类似于多变形的的节点。顶点数据就是要画的图像的⻣骨架,和现实中不同的是,OpenGL中的图像都是由图元组成。

在OpenGL ES中,有3种类型的图元:点、线、三⻆角形

顶点指的是我们在绘制一个图形时,它的顶点位置数据.而这个数据可以直接存储在数组中或者将其缓存到GPU内存中。

开发者通过设定函数指针,在调用绘制的时候,将内存传入顶点数据,也就是说这部分数据之前是存储在内存当中的,被称为顶点数组(VertexArray )。

⽽性能更高的做法是,提前分配⼀块显存,将顶点数据预先传⼊到显存当中。这部分的显存,就被称为顶点缓冲区(VertexBuffer)。

5、管线

在渲染图形的时候,会经历一个一个节点。就像产品流水线一样,所以任务之间也是有先后顺序的。之所以称之为管线是因为显卡在处理数据的时候是按照一个固定的顺序来的,而且严格按照这个顺序。就像水从一根管子的一端流到另⼀端。

6. 固定管线/存储着色器

早期的OpenGL 版本,封装了很多种着⾊器器程序块内置的⼀一段包含了了光照、坐标变换、裁剪等等诸多功能的固定shader程序来完成,来帮助开发者来完成图形的渲染. ⽽开发者只需要传入相应的参数,就能快速完成图形的渲染. 类似于iOS开发会封装很多API,而我们只需要调用,就可以实现功能。

但是由于OpenGL 的使⽤用场景⾮常丰富,固定管线或存储着⾊器无法完成每一个业务.这时将相关部分开放成可编程。

7.顶点着⾊色器器 VertexShader

    用来处理理图形每个顶点变换(旋转/平移/投影等)、用于计算顶点属性的程序

    顶点着⾊色器器是逐顶点运算的程序,也就是说每个顶点数据都会执⾏行行一次顶点着⾊器,当然这是并行的,并且顶点着⾊器运算过程中无法访问其他顶点的数据

    需要计算的顶点属性主要包括顶点坐标变换、逐顶点光照运算等等顶点坐标由自身坐标系转换到归一化坐标系的运算,就是在这里发⽣生的。

8、片元着⾊色器器程序 FragmentShader

用来处理每个像素点的填充和计算

逐像素运算的程序,每个像素执行一次,并行。

9、GLSL (OpenGL Shading Language)

是着色语言,在GPU上运行,着色代码包含vertex Shader(顶点着⾊器)和Fragment(⽚元着⾊器)

代替了了固定的渲染管线的⼀部分,使渲染管线中不同层次具有可编程性。例如投影和视图转换

10、光栅化Rasterization

光栅化就是把顶点数据转换为⽚元的过程,将图片转化成栅格组成的图象。

将几何图形几何图元变为二维图像的过程

过程:①决定窗⼝口坐标中的哪些整型栅格区域被基本图元占⽤用②分配⼀一个颜⾊色值和⼀一个深度值到各个区域。光栅化过程产⽣生的是⽚元。

就是将物体本身的信息和相关颜色信息,转化为对应屏幕上显示的像素和颜色。

特点:每个元素对应帧缓冲区中的⼀一像素

11、纹理Texture

简单理解为图片,渲染图形时需要在其编码填充图,为了让场景更加逼真,这个时候的图片。

12、混合(Blending)

在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜⾊附着上的颜⾊进⾏行混合,混合的算法可以通过OpenGL的函数进行指定。但是OpenGL提供的混合算法是有限的,如果需要更加复杂的混合算法,⼀般可以通过像素着色器进行实现,当然性能会⽐原生的混合算法差⼀一些.

13、渲染上屏/交换缓冲区(SwapBuffer)

为了防止刷新带来的图片显示不全问题。OpenGL程序⾄少都会有两个缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。在⼀一个缓冲区渲染完成之后,通过将屏幕缓冲区和离屏缓冲区交换,实现图像在屏幕上的显示。

显示器刷新为逐行进行,为了防止刷新屏幕上下显示不同帧,所以一般会等待显示器刷新完成的信号,这个信号就被称为垂直同步信号,这个技术被称为垂直同步。

使⽤用了了双缓冲区和垂直同步技术之后,由于总是要等待缓冲区交换之后再进行下一帧的渲染,使得帧率无法完全达到硬件允许的最⾼水平。为了解决这个问题,引入了三缓冲区技术,在等待垂直同步时,来回交替渲染两个离屏的缓冲区,⽽而垂直同步发⽣生时,屏幕缓冲区和最近渲染完成的离屏缓冲区交换,实现充分利用硬件性能的⽬的。

你可能感兴趣的:(OpenGL/OpenGL ES专业名词解析)