Spec-Zone.ru › LÖVE

love.graphics.setStencil

Доступно начиная с LÖVE 0.8.0 и удалено в LÖVE 0.10.0
Оно было заменено на love.graphics.stencil и love.graphics.setStencilTest.

Определяет или освобождает трафарет для операций рисования.

Переданная функция рисует в трафарете вместо экрана, создавая изображение с прозрачными и непрозрачными пикселями. Во время активности используется для проверки, где будут нарисованы или отброшены пиксели. Содержимое изображения напрямую не влияет на трафарет, но ниже приведен обходной путь.

Вызов функции без аргументов освобождает активный трафарет.

Функция

Синопсис

love.graphics.setStencil( stencilFunction )

Аргументы

function stencilFunction
Функция, которая рисует трафарет.

Возвращаемые значения

Ничего.

Функция

Освобождает активный трафарет.

Синопсис

love.graphics.setStencil( )

Аргументы

Нет.

Возвращаемые значения

Ничего.

Примеры

Рисование окружностей, замаскированных прямоугольником

myStencilFunction = function()
   love.graphics.rectangle("fill", 225, 200, 350, 300)
end
 
love.graphics.setStencil(myStencilFunction)
 
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)

Рисование окружности с отверстием

myStencilFunction = function()
   love.graphics.circle("fill", 400, 300, 50)
end
 
love.graphics.setInvertedStencil(myStencilFunction)
love.graphics.circle("fill", 400, 300, 150)

Рисование двух замаскированных треугольников с разными цветами

myStencilFunction = function()
   love.graphics.circle("fill", 400, 300, 60, 25)
end
 
love.graphics.setStencil(myStencilFunction)
love.graphics.setColor(155, 0, 128)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)
 
 
love.graphics.setInvertedStencil(myStencilFunction)
love.graphics.setColor(144, 214, 128)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)

Использование изображения в качестве маски трафарета

-- a black/white mask image: black pixels will mask, white pixels will pass.
local mask = love.graphics.newImage("mymask.png")
 
local mask_effect = love.graphics.newShader[[
   vec4 effect (vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) {
      if (Texel(texture, texture_coords).rgb == vec3(0.0)) {
         // a discarded pixel wont be applied as the stencil.
         discard;
      }
      return vec4(1.0);
   }
]]
 
function myStencilFunction()
   love.graphics.setShader(mask_effect)
   love.graphics.draw(mask, 0, 0)
   love.graphics.setShader()
end
 
love.graphics.setStencil(myStencilFunction)
love.graphics.rectangle("fill", 0, 0, 256, 256)
love.graphics.setStencil()

См. также

  • love.graphics
  • love.graphics.setInvertedStencil


© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.graphics.setStencil

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API