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
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info