WebGL - 图形管道

要渲染3D图形,我们必须遵循一系列步骤.这些步骤称为图形管道渲染管道.下图描绘了WebGL图形管道.

图形管道

在以下部分,我们将逐一讨论管道中每个步骤的作用.

JavaScript

在开发WebGL应用程序时,我们编写着色器语言用于与GPU通信的代码. JavaScript用于编写程序的控制代码,其中包括以下操作 :

  • 初始化WebGL :  JavaScript用于初始化WebGL上下文.

  • 创建数组 : 我们创建JavaScript数组来保存几何数据.

  • 缓冲对象 : 我们通过将数组作为参数传递来创建缓冲对象(顶点和索引).

  • 着色器 : 我们使用JavaScript创建,编译和链接着色器.

  • 属性 : 我们可以创建属性,启用它们,并使用JavaScript将它们与缓冲区对象相关联.

  • 制服 : 我们还可以使用JavaScript关联制服.

  • 转换矩阵 : 使用JavaScript,我们可以创建转换矩阵.

最初我们为所需几何创建数据并将它们传递给表单中的着色器缓冲区.着色器语言的属性变量指向缓冲区对象,缓冲区对象作为输入传递给顶点着色器.

顶点着色器

当我们开始时通过调用方法 drawElements() drawArray()进行渲染过程,对顶点缓冲区对象中提供的每个顶点执行顶点着色器.它计算原始多边形的每个顶点的位置,并将其存储在变化的 gl_position 中.它还计算通常与顶点关联的其他属性,如颜色,纹理坐标顶点.

原始组件

在计算每个顶点的位置和其他细节之后,下一阶段是原始装配阶段.这里三角形被组装并传递给光栅化器.

光栅化

在光栅化步骤中,确定基元最终图像中的像素.它有两个步骤 :

  • 剔除 : 最初确定多边形的方向(正面还是背面?).所有那些在视图区域中不可见的具有不正确方向的三角形都将被丢弃.此过程称为剔除.

  • 剪切 : 如果三角形部分位于视图区域之外,则删除视图区域外的部分.此过程称为裁剪.

片段着色器

片段着色器获取

  • 来自不同变量的顶点着色器的数据,

  • 来自光栅化阶段的原语,然后

  • 计算顶点之间每个像素的颜色值.

片段着色器存储每个像素的颜色值每个片段.在片段操作期间可以访问这些颜色值,我们将在下面讨论.

片段操作

片段操作在确定后执行基元中每个像素的颜色.这些片段操作可能包括以下 :

  • 深度

  • 颜色缓冲区混合

  • 抖动

处理完所有片段后,将形成一个2D图像并显示在屏幕上. 帧缓冲区是渲染管道的最终目的地.

片段操作

帧缓冲区

帧缓冲区是保存场景数据的图形内存的一部分.此缓冲区包含详细信息,如表面的宽度和高度(以像素为单位),每个像素的颜色以及深度和模板缓冲区.