glsl常会数据类型
float
浮点数 float a = 1.0;
int
整数 int a = 1;
bool
布尔值 bool show = false;
vec2
向量2 vec2 foo = vec2(1.0, 2.0); vec2 error = vec2(); // -> 错误 vec2 bar = vec2(0.0); // -> vec2(0.0, 0.0); vec2 foo = vec2(1.0, 2.0); 修改 foo.x = 1.0; foo.y = 2.0; foo *= 2.0; // -> vec2(2.0, 4.0); 创建 vec3 foo = vec3(1.0, 2.0, 3.0); vec2 bar = foo.xy; // foo.yx or foo.zx ...
vec3
向量3 vec3 foo = vec3(0.0); vec3 bar = vec3(1.0, 2.0, 3.0); 修改 01 vec3 bar = vec3(1.0, 2.0, 3.0); // rgb == xyz bar.z = 4.0; 修改 02 vec3 purpleColor = vec3(0.0); // rgb == xyz purpleColor.r = 0.5; purpleColor.b = 1.0; 从vec2创建vec3 vec2 foo = vec2(1.0, 2.0); vec3 bar = vec3(foo, 3.0); or vec3 bar = vec3(foo.x, foo.y, 3.0); or vec3 bar = vec3(foo.r, foo.g, 3.0);
vec4
向量4 vec4 foo = vec4(1.0, 2.0, 3.0, 4.0); float bar = foo.w; // 第四个属性用 w 或者 a 都可以
function
函数 **需要返回数据** float loremIpsum() { float a = 1.0; float b = 2.0; return a + b; } **不需要返回数据** void loremIpsum() { float a = 1.0; float b = 2.0; } **传参** float loremIpsum(float a, float b) { return a + b; } // float result = loremIpsum(1.0, 2.0); // 执行 void main() { float result = loremIpsum(); ... }
许多内置的经典函数
sin cos max min pow exp mod clamp
也有非常实用的功能
cross dot mix step smoothstep length distance reflect refract normalize
变量介绍
gl_Position
gl_Position 1. 已经存在 2. 我们需要分配它。 3. 将包含屏幕上顶点的位置
uniforms
片段着色器
precision 精度
>> 让我们来决定一个浮点数有多精确 - highp > Highp可能会影响性能,在某些设备上可能无法工作 - mediump > 我们通常用medium - lowp > Lowp会因为缺乏精确度而产生bug >> 强制性的
### 我们向着色器发送了很多数据 ### Vertices coordinates > 顶点坐标 ### Mesh transformation > 网格的转换 ### Information about the camera 相机信息 ### Colors 颜色 ### Textures 纹理 ### Lights 灯 ### Fog 雾 ...