05 WebGL 着色器编程语言GLSL ES的结构体
2017-05-31 09:43
183 查看
GLSL ES支持用户自定义的类型,即结构体(structures)。使用关键字struct,将已存在的类型聚合到一起,就可以定义为结构体。比如:
struct light {//定义了结构体类型light
vec4 color;
vec3 position;
}
light l1,l2;//声明了light类型的变量l1和l2 上面这段代码定义了一种新的结构体类型light,它包含两个成员:color变量和position变量。在定义结构体之后,我们又声明了两个light类型的变量l1和l2。和C语言不同的是,没有必要使用typedef关键字来定义结构体,因为结构体的名称会自动成为类型名。
此外,为了方便,可以在同一条语句中定义结构体并声明该结构体类型的变量,如下所示:
struct light {//定义结构体和定义变量同时进行
vec4 color;//光的颜色
vec3 position;//广元位置
} l1;//该结构体类型的变量l1
赋值和构造
结构体有标准的构造函数,其名称与结构体名一致。构造函数的参数的顺序必须与结构体定义中的成员顺序一致。下图显示了结构体构造函数的使用方法。
访问成员
在结构体变量名后跟点运算符(.),然后再加上成员名,就可以访问变量的成员。比如:
vec4 color = l1.color;
vec3 position = l1.position;
运算符
结构体的成员可以参与其自身类型支持的任何运算,但是结构体本身只支持两种运算:赋值(=)和比较(==和!=),如6.9所示。
当且仅当两个结构体变量所对应的所有成员都相等是,==运算符才会返回true,如果任意某个成员不相等,那么!=运算符返回true。
struct light {//定义了结构体类型light
vec4 color;
vec3 position;
}
light l1,l2;//声明了light类型的变量l1和l2 上面这段代码定义了一种新的结构体类型light,它包含两个成员:color变量和position变量。在定义结构体之后,我们又声明了两个light类型的变量l1和l2。和C语言不同的是,没有必要使用typedef关键字来定义结构体,因为结构体的名称会自动成为类型名。
此外,为了方便,可以在同一条语句中定义结构体并声明该结构体类型的变量,如下所示:
struct light {//定义结构体和定义变量同时进行
vec4 color;//光的颜色
vec3 position;//广元位置
} l1;//该结构体类型的变量l1
赋值和构造
结构体有标准的构造函数,其名称与结构体名一致。构造函数的参数的顺序必须与结构体定义中的成员顺序一致。下图显示了结构体构造函数的使用方法。
访问成员
在结构体变量名后跟点运算符(.),然后再加上成员名,就可以访问变量的成员。比如:
vec4 color = l1.color;
vec3 position = l1.position;
运算符
结构体的成员可以参与其自身类型支持的任何运算,但是结构体本身只支持两种运算:赋值(=)和比较(==和!=),如6.9所示。
当且仅当两个结构体变量所对应的所有成员都相等是,==运算符才会返回true,如果任意某个成员不相等,那么!=运算符返回true。
相关文章推荐
- 14 WebGL 着色器编程语言GLSL ES的预处理指令
- 06 WebGL 着色器编程语言GLSL ES的数组
- 11 WebGL 着色器编程语言GLSL ES的内置函数
- 07 WebGL 着色器编程语言GLSL ES的取样器(纹理)
- 08 WebGL 着色器编程语言GLSL ES的运算符优先级
- 12 WebGL 着色器编程语言GLSL ES的全局变量和局部变量
- 02 WebGL 着色器编程语言GLSL ES的数据值类型、变量
- 09 WebGL 着色器编程语言GLSL ES的程序流程控制(分支ifelse和循环for)
- 13 WebGL 着色器编程语言GLSL ES的精度限定字
- 03 WebGL 着色器编程语言GLSL ES的变量类型、赋值和类型转换、运算符
- 10 WebGL 着色器编程语言GLSL ES的函数
- 04 WebGL 着色器编程语言GLSL ES的矢量和矩阵
- WebGL 着色器语言(GLSL ES)
- [置顶] 第二节 WebGL中着色器语言(GLSL ES)的简介
- WebGL 着色器语言(GLSL ES)
- 01 WebGL 着色器编程语言GLSL ES概述
- 05 WebGL初始化着色器
- glsl应用 计算着色器 之 简单的图像写入
- [WebGL入门]八,着色器的说明和基础
- s3.GLSL学习之着色器基础