开发学院

您的位置:首页>教程>正文

教程正文

WebGL 图形管线

WebGL 图形管线

  要绘制三维图形,我们须遵循一系列步骤。这些步骤称为图形管道或渲染管道。下图描述了WebGL图形管线。

webgl_graphics_pipeline.jpg

在下面的部分中,我们将逐一讨论每一步在管道中的作用。

JavaScript

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

  初始化WebGL-用于初始化WebGL上下文。

  创建数组-我们创建JavaScript数组以保存几何体的数据。

  缓冲对象-我们通过将数组作为参数创建缓冲对象(顶点和索引)。

  着色器—我们使用JavaScript创建、编译和链接着色器。

  Attributes变量—我们可以创建并启用Attributes变量,并使用JavaScript与缓冲区对象关联。

  Uniforms变量-我们也可以用JavaScript访问Uniforms变量。

  转换矩阵-使用JavaScript,我们可以创建转换矩阵。

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

顶点着色器

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

原始装配

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

光栅化

  在光栅化步骤中,确定原始图像中的像素位置。它有两个步骤--

  剔除-最初的方向(它是正面还是背面?确定了多边形的位置。所有在视图区不可见的三角形的三角形被丢弃。这个过程称为剔除。

  剪裁−如果三角形部分位于视图区域之外,则删除视图区域之外的部分。这个过程称为剪裁。

片段着色器

  片段着色器获取

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

  从光栅化阶段开始,然后

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

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

  在确定原始图像中每个像素的颜色之后,进行一些片段操作。这些片段操作可能包括以下内容:

  深度

  彩色缓冲混合机

  抖动

  一旦所有片段被处理,将形成二维图像并在屏幕上显示,帧缓冲是渲染管道的最终目标。

fragment_operations.jpg

帧缓冲

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