OpenGL ES 的fragment shader中,必须声明精度,即:
precision mediump float;
OpenGL ES 缺少一些API,比如在FrameBuffer中常用的,将color attachment设置为空的glDrawBuffer(GL_NONE);
OpenGL ES fragment shader默认没有gl_FragColor输出,需要自己声明一个vec4的变量。
- 涉及到频谱绘制的,基本都是使用draw instance 的方式绘制,这能大量减少draw call次数,包括粒子系统也是如此,大量的粒子不可能每个都要绘制一下。但是也有几个并没有使用,比如GLMatrix这个效果,如果有需要,自行修改。
- 同理,大量相同模型的亦然。
没做完的事还是有很多的,列举几个,仅供参考
vec2 st = fragCoord/iResolution.xy;
float aspect = iResolution.x/iResolution.y;
float pcf = 0.0;
vec3 color = vec3(0.0);
float pct = 0.0;
vec2 center = vec2(0.5, 0.5);
center = vec2(abs(sin(iTime)), 0.5);
vec2 dist = st - center;
dist.x *= aspect;
float toCenterLength = length(dist);
pct = step(0.2, toCenterLength);
color = vec3(1.0-pct);
fragColor = vec4(color, 1.0);
color = vec3(0.1, 0.1, 0.1);
pct = smoothstep(0.0, abs(sin(iTime))*0.2, toCenterLength);
color += vec3(1.0-pct) * vec3(1.0, 0.5, 0.2);
fragColor = vec4(color, 1.0);
pct = smoothstep(0.0, abs(cos(iTime))*0.2, toCenterLength);
color += vec3(1.0-pct) * vec3(0.0, 0.5, 0.8);
fragColor += vec4(color, 1.0);