1 attribute highp vec3 aPosition;
2 attribute highp vec2 aTexCoord;
3 attribute highp vec3 aNormal;
4 varying mediump vec2 vTexCoord;
5 varying mediump vec3 vIllumination;
6 varying mediump float vSpecular;
7 uniform mediump vec3 uSize;
8 uniform mediump mat4 uMvpMatrix;
9 uniform mediump mat4 uModelView;
10 uniform mediump mat4 uViewMatrix;
11 uniform mediump mat3 uNormalMatrix;
12 uniform mediump mat4 uObjectMatrix;
13 uniform mediump vec3 lightPosition;
14 uniform mediump vec2 uStageOffset;
16 //Visual size and offset
17 uniform mediump vec2 offset;
18 uniform mediump vec2 size;
19 uniform mediump vec4 offsetSizeMode;
20 uniform mediump vec2 origin;
21 uniform mediump vec2 anchorPoint;
23 vec4 ComputeVertexPosition()
25 vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );
26 float scaleFactor = min( visualSize.x, visualSize.y );
27 vec3 originFlipY =vec3(origin.x, -origin.y, 0.0);
28 vec3 anchorPointFlipY = vec3( anchorPoint.x, -anchorPoint.y, 0.0);
29 vec3 visualOffset = vec3( offset * offsetSizeMode.xy + offset * uSize.xy * (1.0-offsetSizeMode.xy), 0.0) * vec3(1.0,-1.0,1.0);
30 return vec4( (aPosition + anchorPointFlipY)*scaleFactor + visualOffset + originFlipY * uSize, 1.0 );
35 vec4 normalisedVertexPosition = ComputeVertexPosition();
36 vec4 vertexPosition = uObjectMatrix * normalisedVertexPosition;
37 vertexPosition = uMvpMatrix * vertexPosition;
39 //Illumination in Model-View space - Transform attributes and uniforms
40 vec4 mvVertexPosition = uModelView * normalisedVertexPosition;
41 vec3 normal = normalize( uNormalMatrix * mat3( uObjectMatrix ) * aNormal );
43 vec4 mvLightPosition = vec4( ( lightPosition.xy - uStageOffset ), lightPosition.z, 1.0 );
44 mvLightPosition = uViewMatrix * mvLightPosition;
45 vec3 vectorToLight = normalize( mvLightPosition.xyz - mvVertexPosition.xyz );
47 vec3 viewDirection = normalize( -mvVertexPosition.xyz );
49 float lightDiffuse = dot( vectorToLight, normal );
50 lightDiffuse = max( 0.0,lightDiffuse );
51 vIllumination = vec3( lightDiffuse * 0.5 + 0.5 );
53 vec3 reflectDirection = reflect( -vectorToLight, normal );
54 vSpecular = pow( max( dot( reflectDirection, viewDirection ), 0.0 ), 4.0 );
56 vTexCoord = aTexCoord;
57 gl_Position = vertexPosition;