51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
|
|
module.exports = {
|
||
|
|
vertexShader : `
|
||
|
|
varying vec2 uvs;
|
||
|
|
varying vec3 worldPos;
|
||
|
|
void main() {
|
||
|
|
uvs.xy = uv.xy;
|
||
|
|
vec4 p = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
||
|
|
worldPos = (modelMatrix * vec4( position, 1.0 )).xyz;
|
||
|
|
gl_Position = p;
|
||
|
|
}
|
||
|
|
`,
|
||
|
|
|
||
|
|
fragmentShader: `
|
||
|
|
varying vec2 uvs;
|
||
|
|
varying vec3 worldPos;
|
||
|
|
uniform vec3 tunnelNeon;
|
||
|
|
uniform vec3 leftLaser;
|
||
|
|
uniform vec3 rightLaser;
|
||
|
|
uniform vec3 floorNeon;
|
||
|
|
uniform vec3 textGlow;
|
||
|
|
uniform sampler2D src;
|
||
|
|
|
||
|
|
void main() {
|
||
|
|
float mask;
|
||
|
|
vec4 col = texture2D(src, uvs);
|
||
|
|
|
||
|
|
// tunnel neon
|
||
|
|
mask = step(0.87, uvs.x) * step(0.5, uvs.y) * (1.0 - step(0.935, uvs.x)) * ( 1.0 - step(0.75, uvs.y));
|
||
|
|
col.xyz = mix(col.xyz, col.xyz * tunnelNeon, mask);
|
||
|
|
|
||
|
|
// floor & corridor neons
|
||
|
|
mask = step(0.935, uvs.x) * step(0.5, uvs.y) * ( 1.0 - step(0.75, uvs.y));
|
||
|
|
col.xyz = mix(col.xyz, col.xyz * floorNeon, mask);
|
||
|
|
|
||
|
|
// left laser
|
||
|
|
mask = step(0.5, uvs.x) * (1.0 - step(0.625, uvs.x)) * (1.0 - step(0.5, uvs.y));
|
||
|
|
col.xyz = mix(col.xyz, col.xyz * leftLaser, mask);
|
||
|
|
|
||
|
|
// right laser
|
||
|
|
mask = step(0.625, uvs.x) * (1.0 - step(0.75, uvs.x)) * (1.0 - step(0.5, uvs.y));
|
||
|
|
col.xyz = mix(col.xyz, col.xyz * rightLaser, mask);
|
||
|
|
|
||
|
|
// text glows
|
||
|
|
mask = step(0.87, uvs.x) * step(0.25, uvs.y) * (1.0 - step(0.935, uvs.x)) * ( 1.0 - step(0.5, uvs.y));
|
||
|
|
col.xyz = mix(col.xyz, col.xyz * textGlow, mask);
|
||
|
|
|
||
|
|
gl_FragColor = col;
|
||
|
|
}
|
||
|
|
`
|
||
|
|
};
|