UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

52 lines (51 loc) 1.91 kB
module.exports = [ '#pragma phaserTemplate(shaderName)', 'precision mediump float;', 'uniform sampler2D uMainSampler;', 'uniform sampler2D uEnvSampler;', 'uniform sampler2D uNormSampler;', 'uniform mat4 uViewMatrix;', 'uniform float uModelRotation;', 'uniform float uBulge;', 'uniform vec3 uColorFactor;', 'varying vec2 outTexCoord;', '#define PI 3.14159265358979323846', 'void main()', '{', ' vec4 color = texture2D(uMainSampler, outTexCoord);', ' vec3 normal = texture2D(uNormSampler, outTexCoord).rgb;', ' vec3 normalN = normal * 2.0 - 1.0;', ' float normalXYLength = length(normalN.xy);', ' float angle = atan(', ' normalN.y,', ' normalN.x', ' ) - uModelRotation;', ' normalN = vec3(', ' normalXYLength * cos(angle),', ' normalXYLength * sin(angle),', ' normalN.z', ' );', ' normalN = reflect(vec3(0.0, 0.0, -1.0), normalN);', ' normalN = (uViewMatrix * vec4(normalN, 1.0)).xyz;', ' float envX = atan(normalN.x, normalN.z) / PI;', ' float envY = sin(normalN.y * PI / 2.0);', ' vec2 uv = vec2(envX, envY) * 0.5 + 0.5;', ' vec2 rotatedTexCoord = vec2(', ' cos(-uModelRotation) * outTexCoord.x - sin(-uModelRotation) * outTexCoord.y,', ' sin(-uModelRotation) * outTexCoord.x + cos(- uModelRotation) * outTexCoord.y', ' );', ' uv += uBulge * (rotatedTexCoord - 0.5);', ' if (uv.y < 0.0)', ' {', ' uv.y = abs(uv.y);', ' uv.x += 0.5;', ' }', ' else if (uv.y > 1.0)', ' {', ' uv.y = 2.0 - uv.y;', ' uv.x += 0.5;', ' }', ' vec3 environment = texture2D(uEnvSampler, uv).rgb;', ' gl_FragColor = vec4(environment * color.rgb * uColorFactor, color.a);', '}', ].join('\n');