webgl 学习笔记 GLSL ES语法 - 数据类型

基本数据类型

  • float

转换 float(4) 4.0 float(true) 1.0 float(false) 0.0

  • init

int(1.0) 1 int(true) 1 int(false) 0

  • bool

bool(0) false bool(1) true

矢量类型

  • vec2 、vec3、vec4 浮点矢量

vec3 v3 = vec3(1.0, 1.2, 2.0)
vec2 v2 = vec2(v3) // 1.0, 1.2
vec4 v4 = vec4(1.0) // 1.0,1.0,1.0,1.0

  • ivec2、 ivec3、ivec4 整型矢量

ivec2 v2 = vec3(3, 4)

  • bvec2、bvec3、bvec4 布尔矢量

bvec4 v4 = bvec4(true, false, false, false)

矩阵

  • mat2 mat3 mat4
    2x2 3x3 4x4 浮点型矩阵

mat2 m2 = mat2( 1.3,1.4 , 1.2, 1.1) // [ 1.3, 1.2 , 1.4, 1.1]

分量名称

[
x,y,z,w
r,g,b,a,
s,t,p,q
]

数组

只支持一维数组

float floatArray[3]; // 声明长度是3位浮点类型的数组

const int size = 5; 
int size5 = 5;
float floatArray[size] // 必须是常量 
float floatArray[size5] //或报错 

结构体

struct light {
	vec4 color;
	vec3 position;
}

light lt1, lt2; //声明 light类型 变量 lt1  lt2
lt1 = light(vec4(1.0,1.0,1.0,0.2), vec3(8.0,3.3, 1.5))

vec4 color = lt1.color 
vec3 position = lt1.position 

函数

函数需要提前声明类型

float luma(vec4 color) {
	return color.r * 0.2 + color.g * 0.7 + color.b * 0.7;
}

attribute vec4 a_Color;
void main {
 float result = luma(a_Color);
}

或者

float luma(vec4);
attribute vec4 a_Color;
void main {
 float result = luma(a_Color);
}
float luma(vec4 color) {
	return color.r * 0.2 + color.g * 0.7 + color.b * 0.7;
}

  • 参数限定 in、out、const in、inout
//in 强制入参类型
float test(in vec3 color){
return 0.1;
}
//out
float test2(out float result){
	result = 0.5;
	return result;
}

上一篇:C++&Python计算相机响应函数


下一篇:实验七