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中没有默认的) -
-

浙公网安备 33010602011771号