乐趣区

关于前端:游戏引擎-浅入浅出42-顶点着色器

「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/ 随书代码 / 资源下载:

https://github.com/ThisisGame…


顶点着色器的性能就是:对输出的顶点坐标进行解决,而后再输入。

1. 简略的顶点着色器

咱们来写一个简略的,实现下面所说性能的顶点着色器。

#version 110

uniform mat4 u_mvp;

attribute vec3 a_pos;
attribute vec4 a_color;

varying vec4 v_color;

void main()
{gl_Position = u_mvp * vec4(a_pos, 1.0);
    v_color = a_color;
};

这个简略的着色器,将输出的 vec3 的顶点坐标,转换为 vec4 后输入。

2. 顶点着色器语法

2.1 版本限定

#version 110

第一行示意以后 Shader,须要的 GLSL(OpenGL 着色器语言)最低版本。

如果你的电脑,反对的 OpenGL,达不到 Shader 要求的,那么这个 Shader 就有效。

不过个别在检测软件上只能看到 OpenGL 版本,看不到 GLSL 版本,这里提供对应关系表格。

OpenGL Version GLSL Version
2.0 1.10
2.1 1.20
3.0 1.30
3.1 1.40
3.2 1.50
>3.3 =OpenGL Version

依据表格,第一行的 110 对应 OpenGL 2.0,电脑上至多须要反对 OpenGL 2.0 才能够失常运行。

2.2 对立变量

uniform mat4 u_mvp;

uniform 用来润饰对立变量。

GPU 是并行的,Shader 是执行在 GPU 上的程序。

当咱们须要绘制 3 个顶点,GPU 将 3 个顶点数据,摊派到 3 个 GPU 逻辑单元并行处理,每个逻辑单元解决的不同的顶点坐标数据,称之为属性变量。

每个逻辑单元也会须要一些雷同的数据,这些雷同的数据,称之为对立变量。

2.3 属性变量

attribute vec3 a_pos;
attribute vec4 a_color;

属性变量,下面曾经介绍了。

vec3 vPos 示意定义了 vec3 的变量 vPos

attribute 示意这个变量,每执行一次 Shader,都须要被赋值。

2.4 输入变量

varying vec4 v_color;

输入变量由 varying 关键字润饰,<font color=red> 用于从顶点着色器,传递数据到片段着色器 </font>。

2.5 函数逻辑

void main()
{gl_Position = vec4(vPos, 1.0);
}

每个 Shader 都有入口函数 main(),顶点 Shader 次要工作就是:<font color=green> 计算坐标 </font>。
失去坐标计算结果后,传给内置变量 gl_Position

GPU 拿到gl_Position,执行裁剪。

参考文档:Vertex Shader:
https://www.khronos.org/opengl/wiki/Vertex_Shader#Inputs

OPENGL ES 3.0 编程指南 第 5 章 OpenGL ES 着色语言 
退出移动版