OpenGL 渲染管线工作过程

OpenGL 渲染管线工作过程

  • 记住三个单词

    • 顶点数组对象:Vertex Array Object,VAO
    • 顶点缓冲对象:Vertex Buffer Object,VBO
    • 索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO
  • 图形渲染管线(Graphics Pipline)

    • 指的是一堆原始图形数据途径一个输送管道,期间经过各种变化处理最终出现在屏幕上

    • 可以将图像渲染管线划分为两部分:

      • 将 3D 坐标转换为 2D 坐标

      • 将 2D 坐标再变换为实际有颜色的像素

    • 管线可以被划分为多个阶段,后一阶段的输入是前一阶段的输出,而同时每一阶段都是高度专门化,很容易并行执行(也就是流水线)

      GPU上为每一阶段运行的用以加快数据处理的小程序也就是着色器

  • 图元

    • 让OpenGL知道坐标和颜色值构成是什么,指定输入的数据所表示的渲染类型,做出这些提示的就是图元(Primitive)

    • 任何一个绘制指令的调用都将把图元传递给OpenGL

    • 其中的几个:

      • 一系列的点:GL_POINTS
      • 一系列的三角形:GL_TRIANGLES
      • 长线:GL_LINE_STRIP
    • 图形渲染管线的组成

      • 顶点着色器

        • 输入:是一个单独的顶点

        • 目的:将 3D 坐标转换为另一个 3D 坐标

        • 同时允许对顶点属性进行一些基本处理

      • 图元装配

        • 输入:顶点着色器输出的顶点
        • 将点装配成指定图元的形状
      • 几何着色器

        • 输入:图元形式的一系列顶点集合
        • 目的:通过产生新的顶点构造新的图元来生成其他形状
      • 光栅化

        • 将图元映射为最终屏幕上相应的像素
        • 裁切:将超出视图以外的所有像素都丢弃,提升执行效率
        • OpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据
      • 片段着色器

        • 输入:光栅化阶段生成的片段
        • 目的:计算一个像素的最终颜色
        • 通常片段着色器包含 3D 场景的数据(光照,阴影,光的颜色等)
      • Alpha测试和混合阶段

        • 检测片段的深度,用以判断前后关系并决定是否丢弃
        • 检查 alpha 值(alpah定义了一个物体的透明度)
      在现代 OpenGL 中,我们必须定义至少一个 顶点着色器和一个片段着色器 (原因也很简单,这两个着色器在GPU中没有默认的)
      
posted @ 2021-11-26 18:01  blahhhh  阅读(84)  评论(0)    收藏  举报