OpenGL初识

148 阅读6分钟

OpenGL是什么?

OpenGL是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象称为一个个OpenGL对象,对这些资源的操作抽象为一个个的OpenGL指令。下面我们一起简单的看一下OpenGL的一些常用API以及专有名称。

OpenGL上下文(context)

在应用程序调用任务的OpenGL指令之前,需要首先安排常见一个OpenGL上下文。这个上下文是一个非常庞大的状态机,保存了OpenGL中各种状态,这也是OpenGL指令指向的基础。OpenGL的函数不管在哪个语言中,都是类似C语言一样的面向过程的函数,本质上对OpenGL上下文的某个状态或者对象进行操作,都需要把这个对象设置为当前对象。因此对OpenGL指令的封装,是将OpenGL的相关调用封装为一个面向对象的图形API. 由于Opengl上下文是一个状态机,切换上下文往往会产生比较大的开销,但是不同的绘制模块,往往需要独立的状态,所以我们可以在应用程序中创建多个不同的上下文,让它们之间共享纹理,缓冲区资源等等。

OpenGL状态机

对于状态机我们只需要知道它有这样的特点。1、记忆功能,能够记住当前的状态。2、可以接收输入,根据输入的内容和自己原先的状态,修改当前状态并做出对应输出。3、进入停机状态时,不再接收输入,停止工作。

渲染

渲染就是将图形或者图像数据转换成空间图像的操作叫做渲染。

顶点数组 VertexArray

顶点数据就是我们在绘制一个图形是,它的顶点位置数据,顶点数组用来存储这些数据。

顶点缓冲区 VertexBuffer

顶点缓存区是指系统分配的一块显存,用于存放我们的顶点数据。

管线

在openGL的图形渲染中,会经历一步步操作,就像是工厂生产,一条条流水线,但是管线是因为显卡在处理理数据的时候是按照固定的顺序来的,这个顺序不可打破。

固定管线

是指OpenGL中为我们封装了很多种着⾊色器器程序块,内置包函很多功能的固定shader,来帮助开发者完成图形渲染。我们只需要转入对应的参数,相当于已经封装好的API,我们只需要调用,而不需要关系它的实现。

着色器 shader

openGL在实际调用绘制函数之前,还需要指定一个由shader编译成的着色器程序。最常见的着色器由顶点着色器,片元着色器(或称为像素着色器)。openGL在处理着色器时,通过编译,链接等生成了着色器程序glProgram,着色器程序同时包含了顶点着色器和片元着色器的运算逻辑。在OpenGL进⾏行行绘制的时候,⾸首先由顶点着⾊色器器对传⼊入 的顶点数据进⾏行行运算。再通过图元装配,将顶点转换为图元。然后进⾏行行光 栅化,将图元这种⽮矢量量图形,转换为栅格化数据。最后,将栅格化数据传 ⼊入⽚片段着⾊色器器中进⾏行行运算。⽚片段着⾊色器器会对栅格化数据中的每⼀一个像素进 ⾏行行运算,并决定像素的颜⾊。

顶点着⾊色器器VertexShader

顶点着⾊色器器是OpenGL中⽤用于计算顶点属性的程序。顶点着⾊色器器是逐顶点运 算的程序,也就是说每个顶点数据都会执⾏行行⼀一次顶点着⾊色器器,当然这是并 ⾏行行的,并且顶点着⾊色器器运算过程中⽆无法访问其他顶点的数据 ⼀一般来说典型的需要计算的顶点属性主要包括顶点坐标变换、逐顶点光照 运算等等。顶点坐标由⾃自身坐标系转换到归⼀一化坐标系的运算,就是在这 ⾥里里发⽣生的。 OpenGL 专业名词解析 顶点着⾊色器器VertexShader 一般用来处理图形每个顶点的变换(如:旋转,平移,投影等)。顶点着色器是OpenGL用于计算顶点数据的程序,它会一个一个顶点的去计算,每一个顶点的数据都会执行顶点着色器,他们是并行的。

片元着色器

一般用来处理图形中每个像素点颜色的计算和填充,片段着⾊色器器是 逐像素运算的程序,也就是说每个像素都会执行⼀次⽚元着色器,当然也是并行的。

光栅化

简单的理解就是把顶点数据转换为片元的过程,就是将图片转化为显示屏幕的一个个小的像素点。

纹理

纹理可以理解为图⽚. 在渲染图形时需要在其编码填充图片,为了使得场景更加逼真.⽽而这里使⽤的图⽚片,就是常说的纹理.

渲染上屏/交换缓冲区

渲染缓冲区一般映射的是系统的资源比如窗口。如果将图像直接渲染到窗口对应的渲染缓冲区,就可以将图像显示到屏幕上。但是,如果每个窗口只有一个缓冲区,那么在绘制过程中屏幕进⾏了刷新,窗⼝口可能显示出不完整的图像 为了解决这个问题,常规的OpenGL程序至少都会有两个缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。在一个缓冲区渲染完成之后,通过将屏幕缓冲区和离屏缓冲区交换,实现图像 在屏幕上的显示。 由于显示器器的刷新一般是逐行进⾏的,因此为了防⽌止交换缓冲区的时候屏幕上下区域的图像分属于两个不同的帧,因此交换⼀一般会等待显示器刷新完成的信号,在显示器两次刷新的间隔中进行交换,这个信号就被称为垂直同步信号,这个技术被称为垂直同步。