12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- return lovr.graphics.newShader([[
- // All of these are in view-space.
- out vec3 lightDirection; // A vector from the vertex to the light
- out vec3 normalDirection;
- out vec3 vertexPosition;
- const vec3 lightPosition = vec3(0, 10, 3);
- vec4 lovrmain() {
- vec4 vVertex = ViewFromLocal * VertexPosition;
- vec4 vLight = ViewFromWorld * vec4(lightPosition, 1.);
- lightDirection = normalize(vec3(vLight - vVertex));
- normalDirection = normalize(NormalMatrix * VertexNormal);
- vertexPosition = vVertex.xyz;
- return DefaultPosition;
- }
- ]], [[
- in vec3 lightDirection;
- in vec3 normalDirection;
- in vec3 vertexPosition;
- const vec3 cAmbient = vec3(.25);
- const vec3 cDiffuse = vec3(1);
- const vec3 cSpecular = vec3(.35);
- vec4 lovrmain() {
- vec3 N = normalize(normalDirection);
- vec3 L = normalize(lightDirection);
- float diffuse = max(dot(N, L), 0.);
- float specular = 0.;
- if (diffuse > 0.) {
- vec3 r = reflect(L, N);
- vec3 viewDirection = normalize(-vertexPosition);
- float specularAngle = max(dot(r, viewDirection), 0.);
- specular = pow(specularAngle, 5.);
- }
- vec3 cFinal = pow(clamp(vec3(diffuse) * cDiffuse + vec3(specular) * cSpecular, cAmbient, vec3(1.)), vec3(.4545));
- return vec4(cFinal, 1.) * Color * getPixel(ColorTexture, UV);
- }
- ]])
|