1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- local shaderCode = {[[
- /* VERTEX shader */
- out vec4 fragmentView;
- vec4 lovrmain() {
- fragmentView = ClipFromLocal * VertexPosition;
- return fragmentView;
- } ]], [[
- /* FRAGMENT shader */
- in vec4 fragmentView;
- Constants {
- vec3 fogColor;
- };
- vec4 lovrmain() {
- float fogAmount = atan(length(fragmentView) * 0.1) * 2.0 / PI;
- return vec4(mix(Color.rgb, fogColor, fogAmount), Color.a);
- }]]}
- local function grid(subdivisions)
- local size = 1 / math.floor(subdivisions or 1)
- local vertices = {}
- local indices = {}
- for y = -0.5, 0.5, size do
- for x = -0.5, 0.5, size do
- table.insert(vertices, {x, y, 0})
- table.insert(vertices, {x, y + size, 0})
- table.insert(vertices, {x + size, y, 0})
- table.insert(vertices, {x + size, y + size, 0})
- table.insert(indices, #vertices - 3)
- table.insert(indices, #vertices - 2)
- table.insert(indices, #vertices - 1)
- table.insert(indices, #vertices - 2)
- table.insert(indices, #vertices)
- table.insert(indices, #vertices - 1)
- end
- end
- return vertices, indices
- end
- function lovr.load()
- skyColor = {0.208, 0.208, 0.275}
- lovr.graphics.setBackgroundColor(skyColor)
- shader = lovr.graphics.newShader(unpack(shaderCode))
- local vertices, indices = grid(100)
- local offset = lovr.math.noise(0, 0) -- ensure zero height at origin
- for vi = 1, #vertices do
- local x,y,z = unpack(vertices[vi])
- z = (lovr.math.noise(x * 10, y * 10) - offset) / 20
- vertices[vi][1], vertices[vi][2], vertices[vi][3] = x, y, z
- end
- mesh = lovr.graphics.newMesh({{ 'VertexPosition', 'vec3' }}, vertices)
- mesh:setIndices(indices)
- end
- function lovr.draw(pass)
- pass:setShader(shader)
- pass:send('fogColor', { lovr.math.gammaToLinear(unpack(skyColor)) })
- pass:rotate(math.pi/2, 1, 0, 0)
- pass:scale(100)
- pass:setColor(0.565, 0.404, 0.463)
- pass:setDepthOffset(-10000) -- Ensure wireframe stays on top
- pass:draw(mesh)
- pass:setDepthOffset()
- pass:setWireframe(true)
- pass:setColor(0.388, 0.302, 0.412, 0.1)
- pass:draw(mesh)
- end
|