love.graphics.setStencilTest
Доступно начиная с LÖVE 0.10.0
Вместе с love.graphics.stencil оно заменило love.graphics.setStencil.
Настраивает или отключает тестирование трафарета.
Когда тестирование трафарета включено, геометрия всего, что рисуется после этого, будет обрезана/выделена по трафарету на основе сравнения аргументов этой функции и значения трафарета каждого пикселя, с которым эта геометрия соприкасается. Значения трафарета пикселей изменяются с помощью love.graphics.stencil.
Начиная с версии 11.0, буфер трафарета должен быть задан или запрошен в love.graphics.setCanvas при использовании трафаретов с Canvas. love.graphics.setCanvas{canvas, stencil=true} — это удобный способ использования автоматически предоставляемого временного буфера трафарета в этом случае.
Функция
Синтаксис
love.graphics.setStencilTest( comparemode, comparevalue )
Аргументы
CompareMode comparemode- Тип сравнения для каждого пикселя.
number comparevalue- Значение для сравнения со значением трафарета каждого пикселя. Должно быть от 0 до 255.
Возвращаемые значения
Ничего.
Функция
Отключает тестирование трафарета.
Синтаксис
love.graphics.setStencilTest( )
Аргументы
Нет.
Возвращаемые значения
Ничего.
Примеры
Рисование окружностей, замаскированных прямоугольником
local function myStencilFunction()
love.graphics.rectangle("fill", 225, 200, 350, 300)
end
function love.draw()
-- draw a rectangle as a stencil. Each pixel touched by the rectangle will have its stencil value set to 1. The rest will be 0.
love.graphics.stencil(myStencilFunction, "replace", 1)
-- Only allow rendering on pixels whose stencil value is greater than 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 Рисование окружности с отверстием
local function myStencilFunction()
-- Draw a small circle as a stencil. This will be the hole.
love.graphics.circle("fill", 400, 300, 50)
end
function love.draw()
-- Each pixel touched by the circle will have its stencil value set to 1. The rest will be 0.
love.graphics.stencil(myStencilFunction, "replace", 1)
-- Configure the stencil test to only allow rendering on pixels whose stencil value is equal to 0.
-- This will end up being every pixel *except* ones that were touched by the circle drawn as a stencil.
love.graphics.setStencilTest("equal", 0)
love.graphics.circle("fill", 400, 300, 150)
love.graphics.setStencilTest()
end Рисование двух замаскированных треугольников разными цветами
local function myStencilFunction()
love.graphics.circle("fill", 400, 300, 60, 25)
end
function love.draw()
-- Each pixel touched by the circle will have its stencil value set to 1. The rest will be 0.
love.graphics.stencil(myStencilFunction, "replace", 1)
-- Only allow rendering on pixels whose stencil value is greater than 0.
love.graphics.setStencilTest("greater", 0)
love.graphics.setColor(0.6, 0, 0.5)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)
-- Now only allow rendering on pixels whose stencil value is equal to 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 На странице справки love.graphics.stencil приведены дополнительные примеры.
См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.graphics.setStencilTest