love.graphics.stencil (Français)
Disponible depuis LÖVE 0.10.0 |
Avec la fonction love.graphics.setStencilTest (Français), elle ont remplacé love.graphics.setStencil (Français). |
Trace des formes géométriques comme un stencil.
Les formes géométriques tracées par la fonction définie, règle les valeurs invisible du stencil des pixels, au lieu de régler les couleurs des pixels. Le tampon de stencil (qui contient ces valeurs de stencil) peut agir comme un masque / stencil — love.graphics.setStencilTest (Français) peut être utilisé ensuite afin de déterminer la façon dont d'évantage de rendu sera affecté par les valeurs du stencil pour chaque pixel.
Les valeurs de stencil sont des entiers compris dans l'étendue [0, 255].
À partir de la version 11.0, un tampon de stencil doit être réglé ou demandé par love.graphics.setCanvas (Français) lorsque les stencils sont utilisés 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.
|
Contents
Fonction
Synopsis
love.graphics.stencil( stencilfunction, action, value, keepvalues )
Arguments
function (Français) stencilfunction
- Fonction qui trace les formes géométriques. Les valeurs de pixels du stencil, plutôt que les couleurs de chaque pixel, seront affecté par les formes géométriques.
StencilAction (Français) action ("replace")
- Comment modifier les valeurs des pixels du stencil qui sont affectés par ce qui est tracé dans la fonction de stencil.
number (Français) value (1)
- La nouvelle valeur de stencil à utiliser pour les pixels si l'action de stencil « replace » (remplace) est utilisée. N'a acuun effet avec les autres actions de stencil. Doit être compris entre 0 et 255.
boolean (Français) keepvalues (false)
- True (vrai) pour préserver les anciennes valeurs de pixels du stencil, false (faux) pour re-régler les valeurs de chaque pixels du stencil à 0 avant d'exécuter la fonction stencil. love.graphics.clear (Français) re-réglera également toutes els valeurs du stencil.
Retourne
Rien.
Notes
Il est possible de tracer à l'écran et dans les valeurs de stencil des pixels au même moment, en utilisant la fonction love.graphics.setColorMask (Français) dans la fonction de stencil pour activer le traçage sur tous les composants couleurs.
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 comme un stencil. Chaque pixel touché par le rectangle aura sa valeur de stencil réglée à 1. Le reste à 0.
love.graphics.stencil(myStencilFunction, "replace", 1)
-- Permet de ne faire du rendu que sur les pixels dont la valeur de stencil est plus grand 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, 1, 0, 0.45)
love.graphics.circle("fill", 500, 300, 150, 50)
love.graphics.setColor(0, 0, 1, 0.45)
love.graphics.circle("fill", 400, 400, 150, 50)
love.graphics.setStencilTest()
end
Utiliser une Image comme un masque de stencil
-- une image de masque noir et blanc : Les pixels noirs masquerons, les blancs laisseront passer.
local mask = love.graphics.newImage("mymask.png")
local mask_shader = love.graphics.newShader[[
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) {
if (Texel(texture, texture_coords).rgb == vec3(0.0)) {
// Un pixel annulé ne sera pas appliqué au stencil.
discard;
}
return vec4(1.0);
}
]]
local function myStencilFunction()
love.graphics.setShader(mask_shader)
love.graphics.draw(mask, 0, 0)
love.graphics.setShader()
end
function love.draw()
love.graphics.stencil(myStencilFunction, "replace", 1)
love.graphics.setStencilTest("greater", 0)
love.graphics.rectangle("fill", 0, 0, 256, 256)
love.graphics.setStencilTest()
end
Autorise le traçage partout, aux intersections de plusieurs cercles
local function myStencilFunction()
-- Trace quatres cercles se superposant comme un stencil.
love.graphics.circle("fill", 200, 250, 100)
love.graphics.circle("fill", 300, 250, 100)
love.graphics.circle("fill", 250, 200, 100)
love.graphics.circle("fill", 250, 300, 100)
end
function love.draw()
-- Chaque pixel touché par chaque cercle aura sa valeur de stencil incrémentée d'1.
-- Les valeurs du stencil pour les pixels où les cercles se superposent seront au moins de 2.
love.graphics.stencil(myStencilFunction, "increment")
-- Permet uniquement le tracé dans les aires qui ont des valeurs de stencil inférieures à 2.
love.graphics.setStencilTest("less", 2)
-- Trace un grand rectangle.
love.graphics.rectangle("fill", 0, 0, 500, 500)
love.graphics.setStencilTest()
end
La page du wiki love.graphics.setStencilTest (Français) inclus d'avantage d'exemples.
Voir également
Autres langues
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