美文网首页
1. OpenGL图形专有名词、坐标解析

1. OpenGL图形专有名词、坐标解析

作者: 过客Zhaopy | 来源:发表于2022-02-05 09:49 被阅读0次

    一、名词解析:

    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坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制。

    二、坐标解析

    1. 2D笛卡尔坐标系

    2. 3D笛卡尔坐标系

    3. 观察者坐标系(Camera)

    4. 世界坐标系

    5. 惯性坐标系

    6. 物体坐标系

    相关文章

      网友评论

          本文标题:1. OpenGL图形专有名词、坐标解析

          本文链接:https://www.haomeiwen.com/subject/tmmekrtx.html