本质上是建立一种坐标到颜色的映射关系;也可以说 GLSL 是在通过代码控制像素。 颜色在 GLSL 种通过四维向量 vec4 进行表示, 分量代表r、g、b、a四个通道的数值。取值范围均在[0,1]之间,相当于对 0~255 表示的颜色进行单位化: 2. 认识着色器代码 下面是一个最简单的 GLSL 着色器代码,永远输出单一的颜色:...
voidmain() { dvec4 pos=dvec4(position,1.0); gl_Position=vec4(pos); } 在上面的代码中,我们首先将输入的vec3类型的position转换为dvec4类型的pos,然后通过将其转换为vec4类型来设置gl_Position。请注意,由于OpenGL只支持单精度浮点数,因此dvec4类型将被强制转换为vec4类型。
structmyStruct{vec4 position;vec4 color;vec2 uv;}; 构造结构体的代码示例如下: glsl myStruct structVar=myStruct(vec4(0.0,0.0,0.0,0.0),vec4(1.0,1.0,1.0,1.0),vec2(0.5,0.5)); 结构体支持赋值(=)和比较(==,!=)运算符,但要求两个结构体拥有相同的类型且组件分量(component-wise)都必须相同。
#iChannel0"https://img-baofun.zhhainiao.com/pcwallpaper_ugc_mobile/static/2ddf8479959f1f3d9f52d0d561d281fe.jpg"voidmainImage(out vec4 fragColor,invec2 fragCoord){vec2 uv=fragCoord/iResolution.xy;floatN=2.0;uv*=N;uv=fract(uv);fragColor=texture2D(iChannel0,uv);} smoothstep smoothstep...
attributevec4vPos;// 表示顶点位置信息attributevec3vNormal;// 顶点法线信息 attribute与uniform的不同在于,attribute变量记录的是单个顶点的具体信息,而uniform变量记录的信息是全局共享的,与具体顶点无关。 #函数与内置函数 GLSL允许我们自定义函数,自定义函数可以在着色器内部使用: ...
vec3:三维向量,包含三个浮点数。 vec4:四维向量,包含四个浮点数。 GLSL还提供了整数向量和布尔向量类型: ivec2、ivec3、ivec4:整数向量。 bvec2、bvec3、bvec4:布尔向量。 glsl vec3 color = vec3(1.0, 0.5, 0.2); ivec2 position = ivec2(10, 20); bvec4 flags = bvec4(true, false, true,...
constfloat pi =3.14159;constvec4red = vec4(1.0,0.0,0.0,1.0);constmat4identity = mat4(1.0); attribute 限定符 attribute 变量只用于顶点着色器中,用来存储顶点着色器中每个顶点的输入(per-vertex inputs)。 attribute 通常用来存储位置坐标、法向量、纹理坐标和颜色等。注意 attribute 是用来存储单个顶点的...
gl_FragCoord,表示当前片元着色器处理的候选片元窗口相对坐标信息,是一个 vec4 类型的变量 (x, y, z, 1/w), 其中 x, y 是当前片元的窗口坐标,z是深度值,w则是齐次坐标 glsl中还有一些其它的内建变量,我们一起来了解下。 1.1、顶点着色器变量 ...
p =vec4(0.,0.,0.,1.);returnv4; }voiddoubleSize(inoutfloatsize){ size= size *3.0; } 复制代码 三、GLSL 中的运算 ⚠️注意GLSL中没有隐式转换,即便在多维向量中也没有,类似下面这样的的赋值都是错误的: // ⚠️错误 inta=2.0;vec4v4=vec4(1.0,1.0,2,1.0);复制代码 ...