理解OpenGL专业名词

1.OpenGL上下文(context)

  • 在应用程序调用任何OpenGL的指令之前,需要安排⾸先创建⼀个OpenGL的 上下文。这个上下文我理解成画画的一个画板,所有的作画都需要在这个画板上操作,理论上讲这个上下文是一种状态机,保存了OpenGL中的各种状态。所有的“绘画”操作,就类似于对画板上的某个人物或者风景(状态机中的对象)进行操作。
  • 由于OpenGL上下文是⼀个巨⼤的状态机,切换上下文往往会产生较大的开销,但是不同的绘制模块,可能需要使用完全独立的状态管理。因此,可以在应用程序中分别创建多个不同的上下文,在不同线程中使⽤不同的上下文,上下文之间共享纹理、缓冲区等资源。这样的方案,会⽐反复切换上下⽂,或者大量修改渲染状态,更加合理高效

2.OpenGL状态机

状态机的概念很抽象,它具有以下的特点:

  •  它有记忆功能,能够记住其当前的状态。
  •  可以接收输入,根据输入的内容和自己的状态,修改自己的状态,并且可以有对应的输出。
  •  当它进入某个特殊的状态(停机状态)的时候,它不再接收输入,停止工作。

听起来很难理解,把他想象成现实生活中的游戏机🎮,也同样具有记忆功能,接收手柄输入进行对应的画面操作,关机后停止工作。

要改变状态机的状态,通过用户输入命令,比如开启深度测试:glEnable(GL_DEPTH_TEST),开启混合功能glEnable(GL_BLEND)等等

3.渲染(Render)

渲染表示将图形/图像数据转换成3D空间图像操作,也是最终使你图像符合你的3D场景的阶段

4.顶点数组(VertexArray)/ 顶点缓冲区(VertexBuffer)

有了上下文这个画板之后,就要开始画图了,而顶点数组,就相当于图像的骨架,很明显需要开发者来处理,开发者可以选择设定函数指针,在调用绘制方法的时候,传入保存在内存中的顶点数据。

性能更高的做法,提前分配一块显存,将顶点数据保存在显存当中,这部分的显存就称为顶点缓冲区。

比如一个三角形,就拥有三个顶点

5.管线

  • 管线:OpenGL是一个线性的,面向过程的,按顺序处理的流水线工程,管线就表示这个渲染的过程,也是一个抽象的概念
  • 固定管线/存储着色器:固定的渲染过程,早期的OpenGL封装好的程序段,具有一些固定功能,来帮助开发者完成工作,类似于已经封装好的API

6.着色器程序(Shader)

Shader:将固定管线变成可编程管线,来应对更丰富的需求,操作GPU芯片进行计算的着色器程序

常见的有顶点着色器,片元着色器(像素着色器),在Metal里面称为片元函数,顶点函数

OpenGL在处理Shader的时候,通过编译、链接来生成着色器程序

具体步骤:先由顶点着色器对传入的顶点数据进行计算,再通过图元装配,将顶点转换为图元,然后进行光栅化,将图元这种矢量图形,转换为栅格化数据,

最后将栅格化数据传入片段着色器中进行运算,片段着色器会对栅格化数据中的每一个像素进行运算,并决定像素的颜色。

7.光栅化(Rasterization)

把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。

光栅化的目的,是找出一个几何单元(比如三角形)所覆盖的像素。

模型的顶点在经过各种矩阵变换后也仅仅是顶点。而由顶点构成的三角形要在屏幕上显示出来,除了需要三个顶点的信息以外,还需要确定构成这个三角形的所有像素的信息。将几何信息转换成一个个栅格化的图形,这就是光栅化。

8.位图

又叫点阵图像或者栅格图像,由一个个的像素组成,矢量图与位图最大的区别是,它不受分辨率的影响。因此在印刷时,可以任意放大或缩小图形而不会影响出图的清晰度,可以按最高分辨率显示到输出设备上

9.变换矩阵

想让图形发生旋转,平移,缩放,需要用到变换矩阵

10.投影矩阵

用于将3D坐标转换为二维屏幕坐标,相当于一个三维的人照镜子,镜子里面的人影是二维的,这就是一个投影。

 11.视口

表示需要显示的可视范围 —— glviewport

 

 

 

 

posted @ 2019-06-13 17:10  黑暗的咏叹  阅读(216)  评论(0编辑  收藏  举报