love.graphics.setStencilTest (Français)

Disponible depuis LÖVE 0.10.0
Avec love.graphics.stencil, elle ont remplacé love.graphics.setStencil.

Configure ou désactive le test de stencil.

Lorsque le test de stencil est activé, Toutes les formes géométriques tracées après coup seront découpées (clipped) / stencilées en fonction d'une comparaison entre les arguments de cette fonction et des valeurs de stencil de chaque pixel que les formes géométriques touchent. Les valeurs de stencil des pixels sont affectées par love.graphics.stencil.

O.png À partir de la version 11.0, un tampon de stencil doit être réglé ou demandé par love.graphics.setCanvas lorsque les stencils sont utilisé avec un Canvas. love.graphics.setCanvas{canvas, stencil=true} est une méthode simple pour utiliser un tampon de stencil temporaire fourni automatiquement dans ce cas.  


Fonction

Synopsis

love.graphics.setStencilTest( comparemode, comparevalue )

Arguments

CompareMode (Français) comparemode
Le type de comparaison a effectuer pour chaque pixel.
number (Français) comparevalue
La valeur à utiliser lors d'une comparaison avec la valeur de stencil de chauqe pixel. doit être comrpris entre 0 et 255.

Retourne

Rien.

Fonction

Disables stencil testing.

Synopsis

love.graphics.setStencilTest( )

Arguments

Aucun.

Returns

Rien.

Exemples

Tracer des cercles masqués par un rectangle

local function myStencilFunction()
   love.graphics.rectangle("fill", 225, 200, 350, 300)
end

function love.draw()
    -- Trace un rectangle en tant que stencil. Chaque pixel touché par le rectangle aura sa valeur de stencil à 1. Le reste à 0.
    love.graphics.stencil(myStencilFunction, "replace", 1)

    -- N'autorise le rendu que sur les pixels dont la valeur est plus grande (greater) que 0.
    love.graphics.setStencilTest("greater", 0)

    love.graphics.setColor(1, 0, 0, 0.45)
    love.graphics.circle("fill", 300, 300, 150, 50)

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

    love.graphics.setColor(0, 0, 255, 0.45)
    love.graphics.circle("fill", 400, 400, 150, 50)

    love.graphics.setStencilTest()
end

Tracer un cercle avec un trou

local function myStencilFunction()
   -- Trace un petit cercle en tant que stencil. Ce sera le trou.
   love.graphics.circle("fill", 400, 300, 50)
end

function love.draw()
   -- Chaque pixel touché par le cercle aura sa valeur de stencil à 1. Le reste à 0.
   love.graphics.stencil(myStencilFunction, "replace", 1)

   -- Configure le test de stencil pour n'autoriser le rendu que sur les pixels pour lesquels la valeur de stencil est égal à 0.
   -- Cela correspondra à tous les pixels, *à l'exception de* ceux qui sont touchés par le cercles tracé comme un stencil.
   love.graphics.setStencilTest("equal", 0)
   love.graphics.circle("fill", 400, 300, 150)
   love.graphics.setStencilTest()
end

Tracer deux triangles masqués par des couleurs différentes

local function myStencilFunction()
   love.graphics.circle("fill", 400, 300, 60, 25)
end

function love.draw()
   -- Chaque pixel touché par le cercle aura sa valeur à 1, le reste à 0.
   love.graphics.stencil(myStencilFunction, "replace", 1)

   -- N'autorise le rendu que sur les pixels dont la valeur de stencil est plus grand (greater) que 0.
   love.graphics.setStencilTest("greater", 0)
   love.graphics.setColor(0.6, 0, 0.5)
   love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)
 
   -- N'autorise à présent le rendu que sur les pixels dont la valeur de stencil est égal à 0.
   love.graphics.setStencilTest("equal", 0)
   love.graphics.setColor(0.55, 0.85, 0.5)
   love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)

   love.graphics.setStencilTest()
end

La page de wiki love.graphics.stencil (Français) inclus d'avantage d'exemples.

Voir également


Autre langues