litSceneProgramInfo = {
const vs = `#version 300 es
precision mediump float;
in vec3 position;
in vec3 normal;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
out vec3 fragNormal;
out vec3 fragPosition;
void main () {
vec4 newPosition = modelMatrix*vec4(position,1);
fragPosition = newPosition.xyz;
gl_Position = projectionMatrix*viewMatrix*modelMatrix*vec4(position,1);
mat4 normalMatrix = transpose(inverse(modelMatrix));
fragNormal = normalize((normalMatrix*vec4(normal,0)).xyz);
}`;
const fs = `#version 300 es
precision mediump float;
out vec4 outColor;
in vec3 fragNormal;
in vec3 fragPosition;
uniform vec4 light;
uniform vec3 eyePosition;
uniform vec3 materialColor;
uniform float K_s, shininess, ambient;
uniform vec3 specularColor;
void main () {
vec3 N = normalize(fragNormal);
vec3 L;
if (light.w == 1.) L = normalize(light.xyz - fragPosition);
else L = normalize(light.xyz);
vec3 diffuse = materialColor*clamp(dot(L,N), 0.,1.);
vec3 V = normalize(eyePosition - fragPosition);
vec3 H = normalize(L + V);
vec3 specular = specularColor*pow( clamp(dot(H,N),0.,1.),shininess);
vec3 color = materialColor*ambient + (1.-K_s)*diffuse + K_s*specular;
outColor = vec4(color, 1);
}`;
errorBlock.style.height = "20px";
errorBlock.innerHTML = "Program Shader compilation successful";
return twgl.createProgramInfo(gl, [vs, fs], (message) => {
errorBlock.style.height = "400px";
errorBlock.innerHTML = "Scene Program Shader compilation error\n" + message;
});
}