shaders = ({
vs: `#version 300 es
precision mediump float;
in vec3 position;
in vec3 normal;
in vec4 skinWeights;
in uvec4 skinIndices;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
uniform mat4 bonesMatrix[1];
out vec3 fragNormal;
out vec3 fragPosition;
void main () {
vec4 newPosition =
(
bonesMatrix[skinIndices[0]] * vec4(position,1.0) * skinWeights[0] +
bonesMatrix[skinIndices[1]] * vec4(position,1.0) * skinWeights[1] +
bonesMatrix[skinIndices[2]] * vec4(position,1.0) * skinWeights[2] +
bonesMatrix[skinIndices[3]] * vec4(position,1.0) * skinWeights[3]
);
mat4 skinMatrix = (
skinWeights.x * bonesMatrix[int(skinIndices.x)] +
skinWeights.y * bonesMatrix[int(skinIndices.y)] +
skinWeights.z * bonesMatrix[int(skinIndices.z)] +
skinWeights.w * bonesMatrix[int(skinIndices.w)]
);
fragPosition = newPosition.xyz;
// gl_Position = projectionMatrix*viewMatrix*modelMatrix*vec4(position,1);
mat4 normalMatrix = transpose(inverse(modelMatrix));
fragNormal = normalize((normalMatrix*vec4(normal,0)).xyz);
gl_Position = projectionMatrix * viewMatrix * modelMatrix * skinMatrix * vec4(position, 1.0);
}`,
fs: `#version 300 es
precision mediump float;
in vec3 fragNormal;
in vec3 fragPosition;
uniform vec4 light;
uniform vec4 material;
out vec4 outColor;
void main () {
vec3 N = normalize(fragNormal);
vec3 L;
if(light.w == 0.0){
L = normalize(light.xyz);
}else{
L = normalize(light.xyz - fragPosition);
}
vec3 color = material.rgb * clamp(dot(N,L), 0.0, 1.0);//Compute color
// vec3 color = vec3(1,1,1);
outColor = vec4(color, material.a);
}`
});