main.lua 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. function lovr.load()
  2. shader = lovr.graphics.newShader([[
  3. out vec3 lightDirection;
  4. out vec3 normalDirection;
  5. vec3 lightPosition = vec3(0, 3, 3);
  6. vec4 position(mat4 projection, mat4 transform, vec4 vertex) {
  7. vec4 vVertex = transform * vec4(lovrPosition, 1.);
  8. vec4 vLight = lovrView * vec4(lightPosition, 1.);
  9. lightDirection = normalize(vec3(vLight - vVertex));
  10. normalDirection = normalize(lovrNormalMatrix * lovrNormal);
  11. return projection * transform * vertex;
  12. }
  13. ]], [[
  14. in vec3 lightDirection;
  15. in vec3 normalDirection;
  16. vec3 cAmbient = vec3(.25);
  17. vec3 cDiffuse = vec3(.75);
  18. vec3 cSpecular = vec3(.35);
  19. vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) {
  20. float diffuse = max(dot(normalDirection, lightDirection), 0.);
  21. float specular = 0.;
  22. if (diffuse > 0.) {
  23. vec3 r = reflect(lightDirection, normalDirection);
  24. vec3 viewDirection = normalize(-vec3(gl_FragCoord));
  25. float specularAngle = max(dot(r, viewDirection), 0.);
  26. specular = pow(specularAngle, 5.);
  27. }
  28. vec3 cFinal = vec3(diffuse) * cDiffuse + vec3(specular) * cSpecular;
  29. cFinal = clamp(cFinal, cAmbient, vec3(1.));
  30. cFinal = pow(cFinal, vec3(.4545));
  31. return vec4(cFinal, 1.) * graphicsColor * texture(image, uv);
  32. }
  33. ]])
  34. lovr.graphics.setShader(shader)
  35. end
  36. function lovr.draw()
  37. lovr.graphics.cube('fill', 0, 1.7, -1, .5, lovr.timer.getTime(), 0, 1, 0)
  38. end