一、名词解析:
1. Context(上下文):
调用OpenGL之前需要创建一个context上下文,context就是一个状态机
,记录OpenGL中各种配置的状态。
- 状态机:
- 有记忆功能,能记住当前的状态;
- 可以接收输入,根据输入的内容和当前状态,改变自己的状态,并产生输出;
- 当进入特殊状态(停机状态),便不再接收输入,停止工作。
- OpenGL状态机:
- 可以记录当前的状态(比如使用的颜色、是否开启混合等);
- 可以接收输入(如调用OpenGL的函数进行传参);
- 可以进入停止状态,不再接收输入。
2. 渲染:
将图形、图像显示在屏幕上的过程就是渲染(Rendering)。
3. 顶点数组(VertexArray)、顶点缓冲区(VertexBuffer):
- 图形图像的顶点位置数据的数组存储在内存中,这就是顶点数组;
- 渲染过程中,在内存中获取顶点数据效率低,所以更高效的做法是存储在显存中,这就是顶点缓冲区。
4. 着色器(Shader):
着色器就是对GPU编程的代码段,类似于平时写的函数(对CPU编程的代码段)。
- 分类:
- 顶点着色器(VertexShader)
- 片元着色器(FragmentShader)/像素着色器(PixelShader): 这两种名称只是在OpenGL和DirectX中的不同叫法而已。
- 几何着色器(GeometryShader)
- 曲面细分着色器(TessellationShader)
- OpenGL在处理Shader时,和其他编译器一样。通过编译、链接等步骤生成着色器程序(glProgram),着色器程序同时包含顶点着色器和片元着色器的运算逻辑。OpenGL进行绘制时:
- 首先由顶点着色器对传入的顶点数据进行运算;
- 再通过图元装配,将顶点转换为图元;
- 然后进行光栅化,将图元这种矢量图形,转换为栅格化数据;
- 最后,将栅格化数据传入片元着色器进行运算,片元着色器对栅格化数据中的每一个像素进行运算,并决定像素的颜色。
5. 管线:
OpenGL渲染图形时,会经历一个一个的节点,而且每个节点的先后顺序是固定的,类似于流水线,所以称之为管线。
- 固定管线、存储着色器:早期的OpenGL版本,内置了很多固定的shader程序,开发者只需传入相应的参数,就能快速实现图形渲染(也就是只能调用,无法自定义);
- 由于OpenGL的使用场景非常丰富,固定管线或存储管线无法满足现有的场景,这时将相关部分开放成可编程。
6. 顶点着色器(VertexShader):
- 一般用来处理图形每个顶点的变换(平移、旋转、投影等);
- 顶点着色器是OpenGL中用于计算顶点属性,且是逐顶点运算的程序。每个顶点数据都会执行一次顶点着色器。顶点着色器是并行运算,执行过程中无法访问其他顶点数据;
- 一般来说需要计算的顶点属性包括顶点坐标变换、逐顶点光照运算等。
顶点坐标由自身坐标系转换为归一化坐标系的运算,就是在这里发生
。
7. 片元着色器(FragmentShader):
- 一般用来处理图形中每个像素点的颜色计算和填充;
- 片元着色器是OpenGL中用于计算片段(像素)颜色,且是逐像素运算的程序。也就是说每个像素都会执行一次片元着色器,当然也是并行执行的。
8. GLSL(OpenGL Shading Language):
OpenGL着色语言用来在OpenGL中着色编程的语言,是在图形卡的GPU(Graphic Processor Unit图形处理单元)上执行的,代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程性。比如视图转换、投影转换等。
GLSL的着色器代码分成两个部分:顶点着色器(VertexShader)和片元着色器(FragmentShader)。
9. 光栅化(Rasterization):
- 是把顶点数据转换为片元的过程,具有将图转换成一个个栅格组成的图像的作用,特点是每个元素对应帧缓冲区中的一个像素。
- 光栅化是将几何图元变为二维图像的过程。该过程包含两部分操作:
- 决定窗口坐标中哪些整型栅格区域被基本图元占用(也就是确定图形的像素范围);
- 分配一个颜色值和一个深度值到各个区域(也就是把颜色附着上去)。
- 把物体的数学描述以及与物体相关的颜色信息,转换为屏幕上用于对应位置上的像素及用于填充像素的颜色,这个过程成为光栅化。这是一个将模拟信号转化为离散信号的过程。
10. 纹理:
纹理可以理解为图片、位图。
11. 混合(Blending):
- 在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区的颜色进行混合,混合的算法可以通过OpenGL的函数进行指定。也可以通过片元着色器进行实现,性能会比原生的混合算法差一些。
- 两个半透明的颜色叠加在一起,就是颜色的混合行为,就会触发
离屏渲染
。
12. 变换矩阵(Transformation):
用于图形的平移、缩放、旋转等变换。
13. 投影矩阵(Projection):
用于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制。
网友评论