main.lua 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. local shaderCode = {[[
  2. /* VERTEX shader */
  3. out vec4 fragmentClip;
  4. uniform texture2D heightmap;
  5. vec4 lovrmain() {
  6. vec3 position = VertexPosition.xyz;
  7. position.z = getPixel(heightmap, position.xy).r / 10.;
  8. fragmentClip = ClipFromLocal * vec4(position, 1.);
  9. return fragmentClip;
  10. } ]], [[
  11. /* FRAGMENT shader */
  12. in vec4 fragmentClip;
  13. uniform vec3 fogColor;
  14. vec4 lovrmain() {
  15. float fogAmount = atan(length(fragmentClip) * 0.1) * 2.0 / PI;
  16. return vec4(mix(Color.rgb, fogColor, fogAmount), Color.a);
  17. }]]}
  18. function lovr.load()
  19. skyColor = { 0.208, 0.208, 0.275 }
  20. lovr.graphics.setBackgroundColor(skyColor)
  21. heightmap = lovr.graphics.newTexture('heightmap.png')
  22. shader = lovr.graphics.newShader(unpack(shaderCode))
  23. end
  24. function lovr.draw(pass)
  25. pass:setShader(shader)
  26. pass:send('fogColor', { lovr.math.gammaToLinear(unpack(skyColor)) })
  27. pass:send('heightmap', heightmap)
  28. pass:rotate(math.pi / 2, 1, 0, 0)
  29. pass:scale(100)
  30. pass:setColor(0.565, 0.404, 0.463)
  31. pass:setDepthOffset(-10000) -- Ensures wireframe stays on top
  32. pass:plane(mat4(), 'fill', 100)
  33. pass:setDepthOffset()
  34. pass:setWireframe(true)
  35. pass:setColor(0.388, 0.302, 0.412, 0.1)
  36. pass:plane(mat4(), 'fill', 100)
  37. end