03-Hello triangle

  • 顶点数组对象:Vertex Array Object, VAO
  • 顶点缓冲对象:Vertex Buffer Object,VBO
  • 元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象Index Buffer Object,IBO

渲染管线

  • 在OpenGL中,任何事物都是在3D空间中,而屏幕是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。
  • 3D坐标转换为2D坐标的处理过程是由 图形管线 来管理的。
    图形管线(Graphics Pipeline):实际是指一堆原始图形数据途径一个输送管道,期间经过各种变化处理最终出现在屏幕的过程。
  • 图形渲染管线可以被划分为两个主要的部分:
    • 3D坐标转换为2D坐标
    • 把2D坐标转变为实际的有颜色的像素

图形渲染管线每个阶段的抽象展示,蓝色部分代表可自定义的部分:

  1. 顶点着色器:
    • 把一个单独的顶点作为输入,把3D坐标转换为另一种3D坐标,同时允许对顶点的属性进行一些基本处理
  2. 图元装配:
    • 将顶点着色器输出的所有顶点作为输入,并将所有的点装配成指定的图元
  3. 几何着色器:
    • 图元装配的输出会传递给几何着色器。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新的顶点构造出新的图元来生成其他形状。
  4. 光栅化:
    • 该阶段会把图元映射为最终屏幕上相应的像素,生成供片段着色器使用的片段。(并且执行裁切,裁切超出试图部分的像素,提升效率)
  5. 片段着色器:
    • 计算一个像素最终的颜色。片段着色器通常包含3D场景的数据(例如光照、阴影、光的颜色等等)

    OpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据。

  6. 测试与混合:
    • 所有颜色值确定后,传入该测试和混合阶段。该阶段检测片段对应的深度和模板值,用来判断这个像素处于其他其他物体前面还是后面,决定是否应该丢弃。
    • 该阶段也会检查alpha值,并对附体进行混合。
comments powered by Disqus