love.graphics.setStencil (Português)

love.graphics.setStencil


Disponível desde o LÖVE 0.8.0
Esta função não é suportada em versões anteriores.

Define ou retira um estêncil para as operações de desenho.

A função passada desenha no estêncil em vez de na tela, criando uma imagem com pixels transparentes e opacos. Enquando ativo, é usado para testar onde os pixels serão desenhados ou descartados. O conteúdo das imagens não afeta diretamente o estêncil, mas veja abaixo uma maneira de contornar isso.

Chamar a função sem argumentos retira o estêncil ativo.

Função

Sinopse

love.graphics.setStencil( funcaoEstencil )

Argumentos

função funcaoEstencil
Função de que desenha o estêncil.

Retorna

Nada.

Função

Sinopse

love.graphics.setStencil( )

Argumentos

Nenhum.

Retorna

Nada.

Notas

Libera o estêncil ativo.

Exemplos

Desenhar círculos mascarados por um retângulo

minhaFuncaoEstencil = function()
 love.graphics.rectangle("fill", 225, 200, 350, 300)
end

love.graphics.setStencil(minhaFuncaoEstencil)

love.graphics.setColor(255, 0, 0, 120)
love.graphics.circle("fill", 300, 300, 150, 50)
love.graphics.setColor(0, 255, 0, 120)
love.graphics.circle("fill", 500, 300, 150, 50)
love.graphics.setColor(0, 0, 255, 120)
love.graphics.circle("fill", 400, 400, 150, 50)

Desenhar um círculo com um buraco

minhaFuncaoEstencil = function()
 love.graphics.circle("fill", 400, 300, 50)
end

love.graphics.setInvertedStencil(minhaFuncaoEstencil)
love.graphics.circle("fill", 400, 300, 150)

Desenhar dois triângulos mascarados com cores diferentes

minhaFuncaoEstencil = function()
 love.graphics.circle("fill", 400, 300, 60, 25)
end

love.graphics.setStencil(minhaFuncaoEstencil)
love.graphics.setColor(155, 0, 128)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)


love.graphics.setInvertedStencil(minhaFuncaoEstencil)
love.graphics.setColor(144, 214, 128)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)

Usando uma Imagem como máscara

-- uma imagem máscara em preto e branco: pixels pretos mascaram, pixels brancos passam.
local mascara = love.graphics.newImage("minhamascara.png")

local efeito_mascara = love.graphics.newPixelEffect [[
 vec4 effect ( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ) {
 // um fragmento descartado falhará no teste do estêncil.
 if (Texel(texture, texture_coords).rgb == vec3(0.0))
 discard;
 return vec4(1.0);
 }
]]

minhaFuncaoEstencil = function ()
 love.graphics.setPixelEffect(efeito_mascara)
 love.graphics.draw(mascara, 0, 0)
 love.graphics.setPixelEffect()
end

love.graphics.setStencil(minhaFuncaoEstencil)
love.graphics.rectangle("fill", 0, 0, 256, 256)

Veja Também


Outras Línguas