Difference between revisions of "love.graphics.setStencil (日本語)"
m |
m (→画像へステンシルのマスクを使用する) |
||
Line 66: | Line 66: | ||
=== 画像へステンシルのマスクを使用する === | === 画像へステンシルのマスクを使用する === | ||
<source lang="lua"> | <source lang="lua"> | ||
− | -- 白と黒で画像をマスク: | + | -- 白と黒で画像をマスク: 黒ピクセルはマスクされますが、白ピクセルマスクされません。 |
local mask = love.graphics.newImage("mymask.png") | local mask = love.graphics.newImage("mymask.png") | ||
Revision as of 04:30, 26 September 2016
LÖVE 0.8.0 まで使用可能でしたが LÖVE 0.10.0 で廃止されました |
love.graphics.stencil および love.graphics.setStencilTest へ移行。 |
描画操作に対してステンシルの定義または解放します。
関数が渡されると透明および不透明なピクセルのある画像を作成して、画面ではなくステンシルへ描画します。有効である間は、ピクセルを描画または廃棄するか判断するために使用されます。画像の内容はステンシルへ直接影響しないため、それに関するワークアラウンド(解決方法)に関しては下記を参照してください。
引数なしで関数を呼ぶと有効なステンシルを解放します。
Contents
関数
概要
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)
画像へステンシルのマスクを使用する
-- 白と黒で画像をマスク: 黒ピクセルはマスクされますが、白ピクセルマスクされません。
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()
関連
そのほかの言語
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