Skip to content

Instantly share code, notes, and snippets.

@Polkm
Created August 28, 2015 07:20
Show Gist options
  • Save Polkm/17589afe0ccf3cb20548 to your computer and use it in GitHub Desktop.
Save Polkm/17589afe0ccf3cb20548 to your computer and use it in GitHub Desktop.
shadowMapShader = require('shadowMapShader')
lightShader = require('lightShader')
light = {x = 256, y = 256, size = 512}
local g = love.graphics
function love.load()
love.window.setMode(512, 512)
Wwidth, Wheight = love.window.getDimensions()
Xcenter, Ycenter = Wwidth/2, Wheight/2
g.setBackgroundColor(200, 200, 200)
objectCanvas = g.newCanvas(Wwidth, Wheight)
objectCanvas :renderTo(function()
g.setColor(50, 50, 50, 255)
g.rectangle('fill', Xcenter - 100, Ycenter - 100, 50, 50)
g.rectangle('fill', Xcenter + 50, Ycenter + 50, 50, 50)
g.rectangle('fill', Xcenter - 50, Ycenter + 50, 50, 50)
end)
occlusionCanvas = g.newCanvas(light.size, light.size)
shadowMapCanvas = g.newCanvas(light.size, 1, g.rgba8)
shadowMapCanvas:setFilter('linear', 'linear')
shadowMapCanvas:setWrap('repeat', 'repeat')
shadowMapShader:send('resolution', {light.size, light.size})
lightShader:send('resolution', {light.size, light.size})
end
function setcam()
g.push()
g.translate(
-(light.x - light.size/2),
-(light.y - light.size/2)
)
end
function unsetcam()
g.pop()
end
function love.draw(dt)
shadowMapCanvas:clear(255, 255, 255, 255)
occlusionCanvas:clear()
occlusionCanvas:renderTo(function()
setcam()
g.draw(objectCanvas)
unsetcam()
end)
shadowMapCanvas:renderTo(function()
g.setShader(shadowMapShader)
g.draw(occlusionCanvas)
g.setShader()
end)
g.draw(shadowMapCanvas, 0, 5)
g.setShader(lightShader)
g.setColor(255, 255, 255, 255)
g.draw(
shadowMapCanvas,
light.x,
light.y,
0, --rot
1,
-light.size,
shadowMapCanvas:getWidth()/2,
0.5
)
g.setShader()
--setcam()
g.draw(objectCanvas)
--unsetcam()
end
function love.update(dt)
if love.keyboard.isDown('escape') then
love.event.push('quit')
end
end
function love.mousemoved(x, y, dx, dy)
light.x = x
light.y = y
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment