OpenGL

001---OpenGL 图形专有名词与坐标解析

2020-07-13  本文已影响0人  清风烈酒2157

OpenGL简介

OpenGL /OpenGL ES/ Metal 在任何项⽬中解决问题的本质
就是利⽤GPU芯⽚来⾼效渲染图形图像.图形APIiOS开发者唯⼀接近GPU的⽅式

OpenGL 作用

OpenGL 专业名词

OpenGL 上下⽂(context)

在应⽤程序调⽤任何OpenGL的指令之前,需要安排⾸先创建⼀个OpenGL的上下⽂。这个上下⽂是⼀个⾮常庞⼤的状态机,保存了OpenGL中的各种状态,这也是OpenGL指令执⾏的基础

OpenGL的函数不管在哪个语⾔中,都是类似C语⾔⼀样的⾯向过程的函数,本质上都是对OpenGL上下⽂这个庞⼤的状态机中的某个状态或者对象进⾏操作,当然你得⾸先把这个对象设置为当前对象。因此,通过对OpenGL指令的封装,是可以将OpenGL的相关调⽤封装成为⼀个⾯向对象的图形API的

由于OpenGL上下⽂是⼀个巨⼤的状态机,切换上下⽂往往会产⽣较⼤的开销,但是不同的绘制模块,可能需要使⽤完全独⽴的状态管理。因此,可
以在应⽤程序中分别创建多个不同的上下⽂,在不同线程中使⽤不同的上下⽂,上下⽂之间共享纹理、缓冲区等资源。这样的⽅案,会⽐反复切换 上下⽂,或者⼤量修改渲染状态,更加合理⾼效的.

OpenGL 状态机

状态机是理论上的⼀种机器.这个⾮常难以理解.所以我们把这个状态机这么理解.状态机描述了⼀个对象在其⽣命周期内所经历的各种状态,状态间的转变,发⽣转变的动因,条件及转变中所执⾏的活动。或者说,状态机是⼀种⾏为说明对象在其⽣命周期中响应事件所经历的状态序列以及对那些状态事件的响应。因此具有以下特点:

1.  有`记忆功能`,能记住其当前的状态
2.  可以`接收输⼊`,根据输⼊的内容和⾃⼰的原先状态,修改⾃⼰当前状态,并且可以有对应输出
    3.  当进⼊`特殊状态(停机状态)`的时候,变不再接收输⼊,停⽌⼯作;

渲染(Rendering)

顶点数组(VertexArray)和顶点缓冲区(VertexBuffer)

开发者可以选择设定函数指针,在调⽤绘制⽅法的时候,直接由内存传⼊顶点数 据,也就是说这部分数据之前是存储在内存当中的,被称为顶点数组。⽽
性能更⾼的做法是,提前分配⼀块显存,将顶点数据预先传⼊到显存当
中。这部分的显存,就被称为顶点缓冲区

管线

OpenGL下渲染图形,就会有经历⼀个⼀个节点.⽽这样的操作可以理解管线.⼤家可以想象成流⽔线.每个任务类似流⽔线般执⾏.任务之间有先后顺序. 管线是⼀个抽象的概念,之所以称之为管线是因为显卡在处理数据的时候是按照⼀个固定的顺序来的,⽽且严格按照这个顺序。就像⽔从⼀根管⼦的⼀端流到另⼀端,这个顺序是不能打破的.

  1. 任务严格按顺序依次执行.

固定管线/存储着⾊器

着⾊器程序Shader

划重点:

  1. 将固定渲染管线架构变成为了可编程渲染管线
  2. 常见的着色器主要有顶点着色器,片段着色器/像素着色器,几何着色,曲面细分着色器.
  3. OPenGL ES只支持顶点着色器和片段着色器.
  4. OpenGL 通过编译,链接等步骤,将生成着色器程序.
  5. 在OpenGL进行绘制的时候,有顶点着色器对传入的顶点数据进行运算.在通过图元装配,将顶点转换为图元.之后进行光栅化,将图元这种矢量图形,转换为栅格化数据.最后,将栅格化数据传入片段着色器中进行运算.片段着色器会对栅格化数据中的每一个像素进行运算,并决定像素的颜色.

顶点着⾊器VertexShader

⽚元着⾊器程序FragmentShader

因为此时的片元并不是一个真正意义上的像素

GLSL(OpenGL Shading Language)

光栅化Rasterization

纹理(Texture)

混合(Blending)

变换矩阵(Transformation)

投影矩阵(Projection)

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

划重点:

  1. 如果每个窗⼝只有⼀个缓冲区,若在绘制过程中屏幕进⾏了刷新,窗⼝可能显示出不完整的图像。为了解决这个问题,常规的OpenGL程序⾄少都会有两个缓冲区
  2. 垂直同步:由于显示器的刷新⼀般是逐⾏进⾏的,为了防⽌交换缓冲区的时候屏幕上下区域的图像分属于两个不同的帧,交换一般会等待显示器刷新完成的信号,在显示器器两次刷新的间隔中进⾏交换,这个信号就被称为垂直同步信号,这个技术被称为垂直同步
  3. 三缓冲区技术:使用了双缓冲区垂直同步技术之后,由于总是要等待缓冲区交换之后再进⾏下⼀帧的渲染,使得帧率无法完全达到硬件允许的最⾼⽔平。为了解决这个问题,引⼊了三缓冲区技术在等待垂直同步时,来回交替渲染两个离屏的缓冲区,⽽垂直同步发⽣生时,屏幕缓冲区和最近渲染完成的离屏缓冲区交换,实现充分利利⽤硬件性能的⽬的。
上一篇 下一篇

猜你喜欢

热点阅读