开发学院

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

教程正文

​WebGL Shader 程序

WebGL Shader 程序

  我们通常使用三角形来构造网格,由于WebGL使用GPU加速计算,这些三角形的信息应该从CPU传输到需要大量通信开销的GPU。

  WebGL提供了一个解决方案来减少通信开销。它使用在GPU上运行的ES SL(嵌入式系统着色语言) ,我们编写所有必要的shader程序在客户系统上绘制图形元素(我们使用OpenGL ES着色语言/GLSL)。

  这些着色器用于编写着色程序的语言是GLSL。在这些着色器中,我们定义了顶点、转换、材质、灯光和相机如何相互作用以创建特定的图像。简而言之,它是一个实现算法来获取网格像素的代码片段,我们将在后面的章节中讨论更多关于着色器的问题。

  有两种类型的着色器:顶点 Shader和片段 Shader。

顶点 Shader

  顶点 Shader是每个顶点调用的程序代码。它用于将几何图形(例如:三角形)从一个位置转换为另一个位置。它处理每个顶点(每个顶点数据)的数据,如顶点坐标、法线、颜色和纹理坐标.

  在顶点 Shader的ES GL代码中,程序员必须定义属性来处理数据,这些属性指向用JavaScript编写的顶点缓冲对象。

  可以使用ES GL执行以下任务:

  顶点变换

  正常变换与归一化

  纹理坐标生成

  纹理坐标变换

  照明设备

  颜色材料应用

片段 Shader(像素 Shader)

  网格由多个三角形组成,每个三角形的表面称为碎片。片段 Shader是运行在每个片段的所有像素上面的代码,它是用来计算和填充每个像素的颜色。

  可以使用片段 Shader执行以下任务:

  插值的运算

  纹理存取

  纹理应用

  雾

  色彩计算

fragment_shader.jpg

OpenGL ES SL变量

  OpenGL ES SL的完整形式是OpenGL嵌入式系统着色语言。为了处理着色程序中的数据, ES SL提供了三种类型的变量。它们如下−

  attribute变量——这些变量包含顶点着色程序的输入值。属性指向包含每个顶点数据的顶点缓冲对象(VBO).每次调用顶点着色器时,属性都指向不同顶点的VBO。

  uniform变量-这些变量保存了顶点和碎片着色器常见的输入数据,如光照位置、纹理坐标和颜色。

  varying变量-varying变量是顶点 Shader和片段 Shader之间做数据传递用的。

  有了这些基础,我们现在将继续讨论图形管道。