本篇文章是Android下OpenGL ES 2.x相关着色语言(Shading Language)介绍,它是OpenGL着色语言的子集。
1.着色语言简介
OpenGL ES着色语言属于高级图形编程语言,源于C语言。提供有丰富的原生数据类型,如向量、矩阵等。
2.着色语言语法基础
2.1 数据类型
着色器语言中数据类型可以分为:标量、向量、矩阵、采样器、结构体和数组等。
2.1.1 标量
只有大小,没有方向的量,遵循简单的代数运算。OpenGL ES中支持的标量包括:
- bool:true 或 false
- int:值为正数、负数及0
- float:浮点值
bool b;//声明布尔型变量
int a = 10;声明整型变量并赋值
float g = 2.0;//声明float变量并赋值
2.1.2 向量
每个向量由2个、3个或4个相同类型的标量组成,可以存储颜色、位置、纹理坐标等。使用“向量名”.“分量名”方式访问向量分量。
向量类型 | 说明 | 向量类型 | 说明 |
---|---|---|---|
vec2 | 包含两个浮点数的向量 | ivec4 | 包含四个整数的向量 |
vec3 | 包含三个浮点数的向量 | bvec2 | 包含两个布尔数向量 |
vec4 | 包含四个浮点数的向量 | bvec3 | 包含三个布尔数向量 |
ivec2 | 包含两个整数的向量 | bvec4 | 包含四个布尔数向量 |
ivec3 | 包含三个整数的向量 |
代码示例
vec2 v2;//声明一个vec2类型的向量
//访问向量中某个分量
//向量看作颜色,分量可以是:r,g,b,a4
aColor.r = 0.6;
//向量看作位置,分量可以是:x,y,z,w
aPosition.x = 16.2;
//向量看作纹理坐标,分量可以是:s,t,p,q
aTexColor.s = 0.65;