OpenGL常用名词解析

799 阅读6分钟

OpenGL常用名词解析

一、OpenGL简介

OpenGL全称 Open Graphics Library,是用于渲染2D、3D图形的跨平台、跨语言的图形程序编程接口,提供了大量的函数,其特点是平台无关、语言无关。与之相关的还有其它几个概念:

OpenGL ES: 是OpenGL 的子集,用于手机、PAD等嵌入式设备,并且去除了依稀性能较差的接口;

Metal: Apple推出的3D图形渲染框架,苹果官方文档解释是使用GPU进行快速渲染图形和执行并行计算;

DirectX:用于Windows平台的多媒体框架,仅可用于Windows平台。

了解了概念就可以知道其中的区别:

1、OpenGL 与 OpenGL ES 区别:后者是前者的子集,前者用于PC端(例如Mac 和 Windows等),后者用于手机、PAD等;

2、OpenGL 与 Metal 区别:苹果与2014年推出新的图形渲染技术Metal,并于2018年宣布弃用OpenGL,但这不意味着OpenGL在苹果设备上不能使用。只是苹果的图形图形处理的底层已经改有Metal完成,对于已经大量使用OpenGL的的项目,依然可以继续使用,所以OpenGL依然很有学习的必要。

OpenGL能做哪些事情: OpenGL主要做的就是图形图像的渲染,比如:

1、 比如在游戏开发中,对于游戏场景/游戏⼈人物的渲染

2、⽐如在⾳音视频开发中,对于视频解码后的数据渲染

3、⽐如在地图引擎,对于地图上的数据渲染

4、⽐如在动画中,实现动画的绘制

5、⽐如在视频处理理中,对于视频加上滤镜效果

OpenGL /OpenGL ES/ Metal 在任何项⽬中解决问题的本质 就是利⽤GPU芯⽚来高效渲染图形图像.

二、常用名词解析

2.1 OpenGL上下文(context)

在理解context之前,先引入一个概念----OpenGL状态机。我们可以将状态机看作一个理论上的机器,其有以下特点:

1、具有存储记忆功能,可以记录自己的状态

2、可以根据外界的输入和自己的状态,改变现有的状态

3、存在一个特殊状态,可以不接受外界输入,不受其影响。

可以把我们的计算机看成一个状态机,来帮助理解状态机的概念

OpenGL上下文就是一个巨大的状态机,保存了OpenGL的各种状态,并执行OpenGL的指令。 在我们的应用程序中可能会有多个绘制模块,这时我们可以在不同的线程中创建context,并共享纹理、缓冲区资源,以避免切换上下文的消耗。

2.2 渲染、顶点数组、顶点缓冲区

渲染:将图形图像数据转换成2D图像的过程及操作

顶点数组:在我们绘制一个图形时,先要确定其顶点以确定其形状、大小等,其顶点数据就存在于顶点数组中,顶点数组存储在内存中

顶点缓冲区:我们可以现在先将最近最可能访问的顶点数据放入显存中,提升GPU的访问效率,显存中存储这些顶点数据的地方就叫顶点缓冲区,这里点类似于内存及CPU的三级缓存

2.3 管线、着色器

2.3.1 管线

管线:OpenGL的渲染图形流程,就像一个流水线一样,上面有一个一个节点,节点之间按照固定的顺序来执行,而且这个顺序不能打破,如同水管一样。

2.3.2 着色器shader

在调用绘制函数之前,需要先编译生成着色器程序。常见的着色器包括顶点着色器(VertexShader)、片元着色器(FragmentShader)/像素着色器(PixelShader)、细分着色器、几何着色器等。

在早期的OpenGL版本中,封装有很多着色器,包含坐标变换、光照、裁剪等操作,这些行为开发者无需关注其底层原理,只需要传入参数并调用即可,这一时期称为固定管线,这部分shader称为存储着色器。

随着OpenGL开发场景的逐渐丰富,有一部分着色器被开放出来,可以通过 GLSL 进行编程,称之为可编程管线。

GLSL : OpenGL的着色器语言,可供开发者进行编程,在GPU上执行

1、顶点着色器(FragmentShader): 顶点着色器用于处理顶点的一系列操作,包括处理顶点的旋转、平移、缩放等。这一过程会将顶点自身坐标系转换为归一化坐标系。

2、片元着色器(FragmentShader): 用来处理每个像素的颜色填充和计算。片元着色器会逐像素运算,每个像素都会计算一次。比如一个 120*120 的区域,片元着色器需进行14400次运算,但这些计算会并行执行,所以并不影响效率。

2.3.3 光栅化

光栅化是将物体的数学描述及相关颜色信息转换为屏幕上的对应的像素及相关填充颜色的过程。

光栅化将顶点数据转换为片元,即几何图元转换为二维图像的过程,包含两个步骤:

1、决定窗口中哪些整形栅格区域被基本图元占用

2、给这些区域分配一个颜色值和一个深度值

2.3.4 其它名词

纹理:纹理就是图片。以一个png图片为例,其显示过程是先将png图片转换为位图,在渲染过程中根据位图将对应位置的区域填充颜色等信息。在OpenGL中将图片称为纹理。

混合:混合能将不同的颜色混在一起,呈现出一种混合后的颜色。在平时开发中我们经常遇见连个半透明有颜色的控件在重叠后展现出第三种色值的情况,重叠的部分即是混合的结果。

变换矩阵:图形发生坐标平移、缩放、旋转时需要使用到变换矩阵。

投影矩阵:将3D图形转换为2D屏幕坐标需要使用投影矩阵。

三、结尾

本片主要介绍了一些常用的OpenGL 名词解析,不过还缺少坐标系的介绍,在后续的章节中会单独一章进行展示。本人也是初学阶段,有理解不到位的还请大家指出探讨。