attribute vec3 aVertexNormal;
attribute vec3 aVertexPosition;
attribute vec2 aTextureCoord;
uniform mat4 uPMatrix;
uniform mat4 uMVMatrix;
uniform mat3 uNMatrix;
varying vec2 vTextureCoord;
varying vec3 vTransformedNormal;
varying vec4 vPosition;
void main(void) {
vTransformedNormal = uNMatrix * aVertexNormal;
vTextureCoord = aTextureCoord;
vPosition = uMVMatrix * vec4(aVertexPosition, 1.0);
gl_Position = uPMatrix * vPosition;
}
And frag:
precision highp float;
varying vec2 vTextureCoord;
varying vec3 vTransformedNormal;
varying vec4 vPosition;
uniform vec4 uColor;
uniform sampler2D uSampler;
#define MAX_POINT_LIGHTS 1
uniform int pointLightsQuantity;
uniform vec4 pointLightsPositions[MAX_POINT_LIGHTS];
uniform vec3 pointLightsParamsv[MAX_POINT_LIGHTS * 3];
uniform float pointLightsParamsf[MAX_POINT_LIGHTS];
void main(void) {
vec3 lightWeighting;
vec3 lightDirection;
vec3 normal;
vec3 eyeDirection;
vec3 reflectionDirection;
float specularLightWeighting;
float diffuseLightWeighting;
lightDirection = normalize(pointLightsPositions[0].xyz);
//float distance = length(dir);
//float attenuation = 1.0/(1.0+0.1*distance+0.01*distance*distance);
normal = normalize(vTransformedNormal);
eyeDirection = normalize(-vPosition.xyz);
reflectionDirection = reflect(-lightDirection, normal);
specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), pointLightsParamsf[0]);
diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
lightWeighting = pointLightsParamsv[0] + pointLightsParamsv[1] * diffuseLightWeighting + pointLightsParamsv[2] * specularLightWeighting;
vec4 cc = texture2D( uSampler, vTextureCoord.st );
gl_FragColor = vec4(lightWeighting, uColor.a) * cc * uColor;
}
uNMatrix is normal matrix.
I dont' know..where is a mistake?