Difference between revisions of "love.graphics.setStencilTest (日本語)"
m |
m (→用例) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | {{newin (日本語)|[[0.10.0]]|100|type=関数|text=[[love.graphics.stencil (日本語)|love.graphics.stencil]] は [[love.graphics.setStencil (日本語)|love.graphics.setStencil]] と共に変更されました}} | + | {{newin (日本語)|[[0.10.0 (日本語)|0.10.0]]|100|type=関数|text=[[love.graphics.stencil (日本語)|love.graphics.stencil]] は [[love.graphics.setStencil (日本語)|love.graphics.setStencil]] と共に変更されました}} |
ステンシルにおけるテストを構成または無効にします。 | ステンシルにおけるテストを構成または無効にします。 | ||
− | + | ステンシルテストが有効な時、全ての形状は本関数の引数および形状に接触している各ピクセルのステンシル値との間による比較に基づきクリップ、またはステンシル処理されてから描画されます。ピクセルのステンシル値は [[love.graphics.stencil (日本語)|love.graphics.stencil]] による影響を受けます。 | |
− | + | {{notice|1=version [[11.0 (日本語)|11.0]] より、ステンシル・バッファの設定、または Canvas でステンシルを用いるときは [[love.graphics.setCanvas (日本語)|love.graphics.setCanvas]] で指定してください。この場合、 <code>love.graphics.setCanvas{canvas, stencil=true}</code> は自動作成された一時作業用のステンシル・バッファを用いるのに簡単な方法です。}} | |
== 関数 == | == 関数 == | ||
=== 概要 === | === 概要 === | ||
Line 12: | Line 12: | ||
=== 引数 === | === 引数 === | ||
{{param|CompareMode|comparemode|各ピクセルの比較方法。}} | {{param|CompareMode|comparemode|各ピクセルの比較方法。}} | ||
− | {{param|number|comparevalue| | + | {{param|number|comparevalue|各ピクセルのステンシル値の比較時に用いる 0 ~ 255 までの値。}} |
+ | |||
=== 返値 === | === 返値 === | ||
ありません。 | ありません。 | ||
Line 28: | Line 29: | ||
== 用例 == | == 用例 == | ||
− | === | + | === 長方形、多角形と円形でマスクした円の描画 === |
<source lang="lua"> | <source lang="lua"> | ||
− | local function | + | local function myStencilFunction1() |
− | + | love.graphics.rectangle("fill", 225, 200, 350, 300) | |
+ | end | ||
+ | |||
+ | local function myStencilFunction2() | ||
+ | love.graphics.polygon ("fill", 225, 200, 400, 100, 575, 200) | ||
+ | end | ||
+ | |||
+ | local function myStencilFunction3() | ||
+ | love.graphics.circle ("fill", 400, 200, 60) | ||
end | end | ||
function love.draw() | function love.draw() | ||
− | -- | + | |
− | love.graphics.stencil( | + | -- ステンシルで長方形を描画します。長方形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。 |
+ | love.graphics.stencil (myStencilFunction1, "replace", 1) | ||
+ | |||
+ | -- ステンシルで多角形を描画します。多角形に接触する各ピクセルのステンシル値は 1 に、それ以外は無変更となります。 | ||
+ | love.graphics.stencil (myStencilFunction2, "replace", 2, true) | ||
+ | |||
+ | -- ステンシルから円形を削除します。円形に接触する各ピクセルのステンシル値は 1 にデクリメント、それ以外は無変更となります。 | ||
+ | love.graphics.stencil (myStencilFunction3, "decrement", 1, true) | ||
− | -- 0 | + | -- 0 より大きいステンシル値のピクセルのみレンダリングします。 |
− | love.graphics.setStencilTest("greater", 0) | + | love.graphics.setStencilTest ("greater", 0) |
− | love.graphics.setColor( | + | love.graphics.setColor(1, 0, 0, 0.8) |
− | love.graphics.circle("fill", 300, 300, 150 | + | love.graphics.circle("fill", 300, 300, 150) |
− | love.graphics.setColor(0, | + | love.graphics.setColor(0, 1, 0, 0.6) |
− | love.graphics.circle("fill", 500, 300, 150 | + | love.graphics.circle("fill", 500, 300, 150) |
− | love.graphics.setColor(0, 0, | + | love.graphics.setColor(0, 0, 1, 0.6) |
− | love.graphics.circle("fill", 400, 400, 150, | + | love.graphics.circle("fill", 400, 400, 150) |
+ | |||
+ | love.graphics.setColor(1, 1, 1, 1) | ||
+ | love.graphics.circle("fill", 400, 100, 117) | ||
love.graphics.setStencilTest() | love.graphics.setStencilTest() | ||
Line 54: | Line 73: | ||
</source> | </source> | ||
− | === | + | === 穴の開いた円の描画 === |
<source lang="lua"> | <source lang="lua"> | ||
local function myStencilFunction() | local function myStencilFunction() | ||
Line 62: | Line 81: | ||
function love.draw() | function love.draw() | ||
− | -- | + | -- 円形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。 |
love.graphics.stencil(myStencilFunction, "replace", 1) | love.graphics.stencil(myStencilFunction, "replace", 1) | ||
Line 73: | Line 92: | ||
</source> | </source> | ||
− | === | + | === 異色でマスクした三角形二種を描画 === |
<source lang="lua"> | <source lang="lua"> | ||
local function myStencilFunction() | local function myStencilFunction() | ||
Line 80: | Line 99: | ||
function love.draw() | function love.draw() | ||
− | -- | + | -- 円形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。 |
love.graphics.stencil(myStencilFunction, "replace", 1) | love.graphics.stencil(myStencilFunction, "replace", 1) | ||
− | -- 0 | + | -- 0 より大きいステンシル値のピクセルのみレンダリングします。 |
love.graphics.setStencilTest("greater", 0) | love.graphics.setStencilTest("greater", 0) | ||
− | love.graphics.setColor( | + | love.graphics.setColor(0.6, 0, 0.5) |
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350) | love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350) | ||
− | -- 0 | + | -- 0 と等しいステンシル値のピクセルのみレンダリングします。 |
love.graphics.setStencilTest("equal", 0) | love.graphics.setStencilTest("equal", 0) | ||
− | love.graphics.setColor( | + | love.graphics.setColor(0.55, 0.85, 0.5) |
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350) | love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350) | ||
Line 99: | Line 118: | ||
追加の用例は [[love.graphics.stencil (日本語)|love.graphics.stencil]] Wiki ページに掲載されています。 | 追加の用例は [[love.graphics.stencil (日本語)|love.graphics.stencil]] Wiki ページに掲載されています。 | ||
− | == | + | == 関連 == |
* [[parent::love.graphics (日本語)]] | * [[parent::love.graphics (日本語)]] | ||
* [[love.graphics.getStencilTest (日本語)]] | * [[love.graphics.getStencilTest (日本語)]] |
Latest revision as of 09:44, 28 June 2023
LÖVE 0.10.0 から使用可能 |
love.graphics.stencil は love.graphics.setStencil と共に変更されました。 |
ステンシルにおけるテストを構成または無効にします。
ステンシルテストが有効な時、全ての形状は本関数の引数および形状に接触している各ピクセルのステンシル値との間による比較に基づきクリップ、またはステンシル処理されてから描画されます。ピクセルのステンシル値は love.graphics.stencil による影響を受けます。
version 11.0 より、ステンシル・バッファの設定、または Canvas でステンシルを用いるときは love.graphics.setCanvas で指定してください。この場合、 love.graphics.setCanvas{canvas, stencil=true} は自動作成された一時作業用のステンシル・バッファを用いるのに簡単な方法です。
|
Contents
関数
概要
love.graphics.setStencilTest( comparemode, comparevalue )
引数
CompareMode comparemode
- 各ピクセルの比較方法。
number comparevalue
- 各ピクセルのステンシル値の比較時に用いる 0 ~ 255 までの値。
返値
ありません。
関数
ステンシルのテストを無効にします。
概要
love.graphics.setStencilTest( )
引数
なし。
返値
ありません。
用例
長方形、多角形と円形でマスクした円の描画
local function myStencilFunction1()
love.graphics.rectangle("fill", 225, 200, 350, 300)
end
local function myStencilFunction2()
love.graphics.polygon ("fill", 225, 200, 400, 100, 575, 200)
end
local function myStencilFunction3()
love.graphics.circle ("fill", 400, 200, 60)
end
function love.draw()
-- ステンシルで長方形を描画します。長方形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。
love.graphics.stencil (myStencilFunction1, "replace", 1)
-- ステンシルで多角形を描画します。多角形に接触する各ピクセルのステンシル値は 1 に、それ以外は無変更となります。
love.graphics.stencil (myStencilFunction2, "replace", 2, true)
-- ステンシルから円形を削除します。円形に接触する各ピクセルのステンシル値は 1 にデクリメント、それ以外は無変更となります。
love.graphics.stencil (myStencilFunction3, "decrement", 1, true)
-- 0 より大きいステンシル値のピクセルのみレンダリングします。
love.graphics.setStencilTest ("greater", 0)
love.graphics.setColor(1, 0, 0, 0.8)
love.graphics.circle("fill", 300, 300, 150)
love.graphics.setColor(0, 1, 0, 0.6)
love.graphics.circle("fill", 500, 300, 150)
love.graphics.setColor(0, 0, 1, 0.6)
love.graphics.circle("fill", 400, 400, 150)
love.graphics.setColor(1, 1, 1, 1)
love.graphics.circle("fill", 400, 100, 117)
love.graphics.setStencilTest()
end
穴の開いた円の描画
local function myStencilFunction()
-- ステンシルで小型の円を描画します。これは穴が開いています。
love.graphics.circle("fill", 400, 300, 50)
end
function love.draw()
-- 円形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。
love.graphics.stencil(myStencilFunction, "replace", 1)
-- ピクセルの表示でステンシル値が 0 と等しくて許可されている場合のみステンシルにおけるテストを構成します。
-- これはステンシルとして描画された円に接触している*以外*の全ピクセルが対象になります。
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()
-- 円形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。
love.graphics.stencil(myStencilFunction, "replace", 1)
-- 0 より大きいステンシル値のピクセルのみレンダリングします。
love.graphics.setStencilTest("greater", 0)
love.graphics.setColor(0.6, 0, 0.5)
love.graphics.polygon("fill", 400, 200, 486, 350, 314, 350)
-- 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 Wiki ページに掲載されています。
関連
そのほかの言語
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