Difference between revisions of "love.graphics.setStencil (日本語)"
(Created page with "{{newinoldin (日本語)|0.8.0|080|0.10.0|100|type=関数|text=love.graphics.stencil および love.graphics.setStencilTest (...") |
m (→画像へステンシルのマスクを使用する) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
描画操作に対してステンシルの定義または解放します。 | 描画操作に対してステンシルの定義または解放します。 | ||
− | + | 関数が渡されると透明および不透明なピクセルのある画像を作成して、画面ではなくステンシルへ描画します。有効である間は、ピクセルを描画または廃棄するか判断するために使用されます。画像の内容はステンシルへ直接影響しないため、それに関するワークアラウンド(解決方法)に関しては下記を参照してください。 | |
引数なしで関数を呼ぶと有効なステンシルを解放します。 | 引数なしで関数を呼ぶと有効なステンシルを解放します。 | ||
Line 15: | Line 15: | ||
ありません。 | ありません。 | ||
== 関数 == | == 関数 == | ||
+ | 有効なステンシルを解放します。 | ||
=== 概要 === | === 概要 === | ||
<source lang="lua"> | <source lang="lua"> | ||
Line 23: | Line 24: | ||
=== 返値 === | === 返値 === | ||
ありません。 | ありません。 | ||
− | |||
− | |||
== 用例 == | == 用例 == | ||
=== 長方形でマスクしてから円を描画します === | === 長方形でマスクしてから円を描画します === | ||
Line 67: | Line 66: | ||
=== 画像へステンシルのマスクを使用する === | === 画像へステンシルのマスクを使用する === | ||
<source lang="lua"> | <source lang="lua"> | ||
− | -- 白と黒で画像をマスク: | + | -- 白と黒で画像をマスク: 黒ピクセルはマスクされますが、白ピクセルマスクされません。 |
local mask = love.graphics.newImage("mymask.png") | local mask = love.graphics.newImage("mymask.png") | ||
Line 73: | Line 72: | ||
vec4 effect (vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) { | vec4 effect (vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords) { | ||
if (Texel(texture, texture_coords).rgb == vec3(0.0)) { | if (Texel(texture, texture_coords).rgb == vec3(0.0)) { | ||
− | // | + | // 破棄されたピクセルはステンシルとして適用されません。 |
discard; | discard; | ||
} | } |
Latest revision as of 04:42, 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)) {
// 破棄されたピクセルはステンシルとして適用されません。
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