数据传递
opengl以及它的自己webgl,很大一部分工作是用来把数据传递到shader里面去的。如果让我们写一个纯粹的shader,我们也是可以写出来的。例如你可以用下面的代码来画一个2D的圆形。
uniform vec2 u_resolution;
uniform float u_time;
uniform vec2 u_mouse;
float Circle(vec2 uv, float radius, vec2 p, float blur) {
uv -= p; // -0.5 <> 0.5
uv.x *= u_resolution.x / u_resolution.y;
float d = length(uv);
float pct = smoothstep(radius, radius-blur, d);
return pct;
}
void main() {
vec2 uv = gl_FragCoord.xy / u_resolution.xy; // 0 <> 1
float mask = Circle(uv, .1, vec2(.5), .005); // create face;
gl_FragColor = vec4(mask, 1.0);
}
以上我们利用的是一些内置的gl函数来绘制的一个圆形。但是大家都知道,我用webgl绘制一个圆形的方法是接壤不通。
顶点着色
顶点找色起得工作就是在屏幕上对每个点进行计算,然后规定我们shader的作用范围。