变量数据类型
bool bDone = false;
int iValue = 42;
uint uiValue = 3929u;
float fValue = 3.14f;
向量数据类型
//1.向量声明-4分量的float类型向量
vec4 v1;
//2.声明向量并且对其进行构造
vec4 v2 = vec4(1,2,3,4);
//3.向量运算,加,赋值给另外一个向量,与标量相乘
vec4 v;
vec4 vPos = vec4(1,2,3,4);
vec4 vOffset = vec4(1,2,3,4);
v = vPos + vOffset;
v = vNewPos;
v += vec4(10,10,10,10);
v = vPos * vOffset;
v *= 5;
//4.向量中元素的获取 可以通过x,y,z,w来获取向量中的元素值
v1.x = 3.0f;
v1.xy = vec2(3.0f,4.0f);
v1.xyz = vec3(3.0f,4.0f,5.0f);
//5.可以通过颜色控制rgba
v1.r = 3.0f;
v1.rgba = vec4(1.0f,1.0f,1.0f,1.0f);
//6.可以通过纹理坐标strq
v1.st = vec2(1.0f,0.0f);
//7.赋值混合是否合法.不可以
v1.st = v2.xt;//不可以
v1.st = v2.xy;//可以,没有开发意义
//8.向量支持调换(swizzle)操作,2个或者2个以上向量元素来进行交换
v1.rgba = v2.bgra;
v2.bgra = v1.rgba;
//赋值操作
v1.r= v2.b;
v1.g= v2.g;
v1.b= v2.r;
v1.a= v2.a;
//9.向量支持一次性对所有分量操作
v1.x = vother.x + 5.0f;
v1.y = vother.y + 5.0f;
v1.z = vother.z + 5.0f;
v1.xyz = vother.xyz + vec3(5.0f,5.0f,5.0f);
矩阵
//1.创建矩阵
mat4 m1,m2,m3,m4;
//2.构造单元矩阵
mat4 m1 = matv(
1.0f,0.0f,0.0f,0.0f,
0.0f,1.0f,0.0f,0.0f,
0.0f,0.0f,1.0f,0.0f,
0.0f,0.0f,0.0f,1.0f,
);
mat4 m4 = mat4(1.0f);
mat4 m3 = mat4(
0.5f,0.5f,0.5f,0.5f,
0.5f,0.5f,0.5f,0.5f,
0.5f,0.5f,0.5f,0.5f,
0.5f,0.5f,0.5f,0.5f,
);
m1 = m2 * m3;
const
const float zeero = 0.0;
结构体
struct forStruct {
vec4 color;
float start;
float end;
}forVar;
forVar = forStruct(vec4(1.0,1.0,1.0,1.0),0.5,2.0);
vec4 color = forVar.color;
float start = forVar.start;
数组
float floatArray[4];
vec4 vecArray[2];
float a[4] = float[](1.0,2.0,3.0,4.0);
vec2 c[2] = vec2[2](vec2(1.0,2.0),fec2(3.0,4.0));
函数
定义函数给3个修饰符
in : (没有指定时,默认限定修饰符),传递进入函数中,函数不能对其进行修改
inout:(传入相应数值,并且可以在函数中进行修改)
out : (函数返回时,可以将其修改)
vec4 myFunc(intout float myFloat,out vec4 m1,mat2 m2){
}
vec4 diffuse(vec3 normal,vec3 light,vec4 baseClor){
return baseColor * dot(normal,light);
}
控制语句
if(coor.a < 0.25) {
color.a *= color.a;
}else {
color = vec4(1.0,1.0,1.0,1.0);
}
循环支持while/do...while/for
OpenGL ES开发中,尽量减少逻辑判断,降低循环使用。
网友评论