add simple cone shadows (blurred)
This commit is contained in:
parent
b259aa3839
commit
0c1332afb3
18
assets/shaders/blur.glsl
Normal file
18
assets/shaders/blur.glsl
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
extern vec2 direction; // (1.0, 0.0) для X, (0.0, 1.0) для Y
|
||||||
|
extern number radius; // радиус размытия
|
||||||
|
|
||||||
|
vec4 effect(vec4 vcolor, Image tex, vec2 texture_coords, vec2 screen_coords)
|
||||||
|
{
|
||||||
|
vec4 sum = vec4(0.0);
|
||||||
|
float weightTotal = 0.0;
|
||||||
|
|
||||||
|
for (int i = -10; i <= 10; i++) {
|
||||||
|
float offset = float(i);
|
||||||
|
float weight = exp(-offset * offset / (2.0 * radius * radius));
|
||||||
|
vec2 shift = direction * offset / love_ScreenSize.xy;
|
||||||
|
sum += Texel(tex, texture_coords + shift) * weight;
|
||||||
|
weightTotal += weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum / weightTotal;
|
||||||
|
}
|
||||||
@ -72,7 +72,7 @@ function sprite:draw()
|
|||||||
local mesh = makeGradientMesh(0.4, 1.5, { 0, 0, 0, 0.5 }, { 0, 0, 0, 0 })
|
local mesh = makeGradientMesh(0.4, 1.5, { 0, 0, 0, 0.5 }, { 0, 0, 0, 0 })
|
||||||
love.graphics.push()
|
love.graphics.push()
|
||||||
love.graphics.translate(position.x, position.y)
|
love.graphics.translate(position.x, position.y)
|
||||||
love.graphics.rotate(-3 * math.pi / 4)
|
love.graphics.rotate(love.timer.getTime())
|
||||||
love.graphics.translate(-0.2, 0)
|
love.graphics.translate(-0.2, 0)
|
||||||
love.graphics.draw(mesh)
|
love.graphics.draw(mesh)
|
||||||
love.graphics.pop()
|
love.graphics.pop()
|
||||||
|
|||||||
@ -8,7 +8,7 @@ render.__index = render
|
|||||||
|
|
||||||
function render:clear()
|
function render:clear()
|
||||||
love.graphics.setCanvas(self.shadowLayer)
|
love.graphics.setCanvas(self.shadowLayer)
|
||||||
love.graphics.clear(1, 1, 1, 0)
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas(self.spriteLayer)
|
love.graphics.setCanvas(self.spriteLayer)
|
||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
love.graphics.setCanvas(self.floorLayer)
|
love.graphics.setCanvas(self.floorLayer)
|
||||||
@ -17,13 +17,37 @@ function render:clear()
|
|||||||
love.graphics.clear()
|
love.graphics.clear()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function applyBlur(input, radius)
|
||||||
|
local blurShader = Tree.assets.files.shaders.blur
|
||||||
|
local tmp = love.graphics.newCanvas(1280, 720)
|
||||||
|
|
||||||
|
-- Горизонтальный проход
|
||||||
|
blurShader:send("direction", { 1.0, 0.0 })
|
||||||
|
blurShader:send("radius", radius)
|
||||||
|
|
||||||
|
tmp:renderTo(function()
|
||||||
|
love.graphics.setShader(blurShader)
|
||||||
|
love.graphics.draw(input)
|
||||||
|
love.graphics.setShader()
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Вертикальный проход
|
||||||
|
love.graphics.setShader(blurShader)
|
||||||
|
blurShader:send("direction", { 0.0, 1.0 })
|
||||||
|
love.graphics.draw(tmp)
|
||||||
|
love.graphics.setShader()
|
||||||
|
end
|
||||||
|
|
||||||
function render:draw()
|
function render:draw()
|
||||||
-- пол -> тени -> спрайты -> оверлей
|
-- пол -> тени -> спрайты -> оверлей
|
||||||
love.graphics.draw(self.floorLayer)
|
love.graphics.draw(self.floorLayer)
|
||||||
love.graphics.setBlendMode("multiply", "premultiplied")
|
|
||||||
love.graphics.draw(self.shadowLayer)
|
applyBlur(self.shadowLayer, 10)
|
||||||
love.graphics.setBlendMode("alpha")
|
-- love.graphics.draw(self.shadowLayer)
|
||||||
|
love.graphics.setShader()
|
||||||
|
|
||||||
love.graphics.draw(self.spriteLayer)
|
love.graphics.draw(self.spriteLayer)
|
||||||
|
|
||||||
love.graphics.draw(self.overlayLayer)
|
love.graphics.draw(self.overlayLayer)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user