1、OpenGl常见名词理解

2020-07-08  本文已影响0人  代码之道

1. 图形api简介

2. 图形API解决什么问题?

简单的说就是实现图形的底层渲染,就是利用GPU来高效渲染图形图像。图形API是IOS开发者唯一接近GPU的方式。

3. OpenGL状态机

状态机是一台可以保存状态,并根据当前状态进行相应输出的机器。

核心要点

4. OpenGL上下文 (context)

核心要点

5. 渲染(Rendering)

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

6. 顶点数组(Vertext Array)和顶点缓冲区(Vertext Buffer)

7. 管线

在OpenGL下渲染图形,会经历一个一个的节点,这样的操作可以理解为管线。管线是一个抽象的概念。可以类比于工厂流水线,任务严格按照先后顺序依次执行。

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

在早期的OpenGL版本中,封装了多种着色器程序块来帮助开发者快速完成图形的渲染,开发者只需要传入相应的参数,就能完成图形的渲染,类似于ios开发会封装很多API. 我们只需要调用,就可以实现功能,不需要关心底层的实现原理。
但是OpenGL的使用场景非常丰富,固定管线或存储着色器无法完成每一个业务,这时将相关部分开放成可编程。

9. 着色器程序(Shader)

可编程的渲染管线。
OpenGl在实际调用绘制函数之前,还需要指定一个由shader编译成的着色器程序。常见的着色器程序只要有顶点着色器,片段着色器/像素着色器,几何着色器,曲面着色器,片段着色器和像素着色器只是在OpenGL和DX中的不同叫法而已,OpenGL ES 只支持顶点着色器和片段着色器这两个最基础的着色器。

OpenGL在处理shader时,和其他编译器一样,通过编译、链接等步骤,生成了着色器程序,着色器程序同时包含顶点着色器和片段着色器的运算逻辑,在OpenGL进行绘制的时候,首先由顶点着色器对传入的顶点数据进行运算,再通过图元装配,将顶点转换为图元。然后进行光栅化,将图元这种矢量图形,转换为栅格化数据。最后将栅格化数据传入片段着色器中进行运算。片段着色器会对栅格化数据中的每一个像素进行运算,并决定像素的颜色。

核心要点

9.1 顶点着色器(vertexShader)

OpenGL中用于计算顶点属性的程序,一般用来处理图形每个顶点变换(旋转/平移/投影等)。顶点着色器是逐顶点运算的程序。也就是说每个顶点都会执行一次顶点着色器。当然这是并行的,并且顶点着色器运算过程中无法访问其他的顶点数据。

9.2 片段着色器(fragmentShader)

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

10. GLSL(OpenGl Shading Language)

11. 光栅化Rasterization

  1. 第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用
  2. 第二部分工作:分配一个颜色值和深度值到各个区域。

12. 纹理

纹理可以理解为图片,在渲染图形时需要在顶点围成的区域中填充图片,使得场景更加逼真,而这里使用的图片,就是常说的纹理,在OpenGL中,习惯叫做纹理。

13. 混合(Blending)

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

14. 矩阵

14.1 变换矩阵

例如图形想要平移,缩放,旋转等变换,就需要使用变换矩阵

14.2 投影矩阵

用于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制。

15. 渲染上屏/交换缓冲区

上一篇 下一篇

猜你喜欢

热点阅读