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]] による影響を受けます。
+
ステンシルテストが有効な時、全ての形状は本関数の引数および形状に接触している各ピクセルのステンシル値との間による比較に基づきクリップ、またはステンシル処理されてから描画されます。ピクセルのステンシル値は [[love.graphics.stencil (日本語)|love.graphics.stencil]] による影響を受けます。
  
各々の [[Canvas (日本語)|Canvas]] はピクセルごとにステンシル値を独自に有しています。
+
{{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|各ピクセルのステンシル値を比較する時に使用される値。範囲は 0 から 255 までの間にする必要があります。}}
+
{{param|number|comparevalue|各ピクセルのステンシル値の比較時に用いる 0 255 までの値。}}
 +
 
 
=== 返値 ===
 
=== 返値 ===
 
ありません。
 
ありません。
Line 28: Line 29:
  
 
== 用例 ==
 
== 用例 ==
=== 長方形によりマスクされた円を描画します。 ===
+
=== 長方形、多角形と円形でマスクした円の描画 ===
 
<source lang="lua">
 
<source lang="lua">
local function myStencilFunction()
+
local function myStencilFunction1()
  love.graphics.rectangle("fill", 225, 200, 350, 300)
+
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()
     -- ステンシルで長方形を描画します。長方形に接触している各ピクセルのステンシル値は 1 に設定されます。それ以外は 0 です。
+
     love.graphics.stencil(myStencilFunction, "replace", 1)
+
     -- ステンシルで長方形を描画します。長方形に接触する各ピクセルのステンシル値は 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(255, 0, 0, 120)
+
     love.graphics.setColor(1, 0, 0, 0.8)
     love.graphics.circle("fill", 300, 300, 150, 50)
+
     love.graphics.circle("fill", 300, 300, 150)
  
     love.graphics.setColor(0, 255, 0, 120)
+
     love.graphics.setColor(0, 1, 0, 0.6)
     love.graphics.circle("fill", 500, 300, 150, 50)
+
     love.graphics.circle("fill", 500, 300, 150)
  
     love.graphics.setColor(0, 0, 255, 120)
+
     love.graphics.setColor(0, 0, 1, 0.6)
     love.graphics.circle("fill", 400, 400, 150, 50)
+
     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 です。
+
   -- 円形に接触する各ピクセルのステンシル値は 1 に、それ以外は 0 となります。
 
   love.graphics.stencil(myStencilFunction, "replace", 1)
 
   love.graphics.stencil(myStencilFunction, "replace", 1)
  
Line 73: Line 92:
 
</source>
 
</source>
  
=== 異なる色で 2 つのマスクされた三角形を描画します。 ===
+
=== 異色でマスクした三角形二種を描画 ===
 
<source lang="lua">
 
<source lang="lua">
 
local function myStencilFunction()
 
local function myStencilFunction()
Line 80: Line 99:
  
 
function love.draw()
 
function love.draw()
   -- 円に接触している各ピクセルのステンシル値は 1 に設定されます。それ以外は 0 です。
+
   -- 円形に接触する各ピクセルのステンシル値は 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(155, 0, 128)
+
   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(144, 214, 128)
+
   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.stencillove.graphics.setStencil と共に変更されました。

ステンシルにおけるテストを構成または無効にします。

ステンシルテストが有効な時、全ての形状は本関数の引数および形状に接触している各ピクセルのステンシル値との間による比較に基づきクリップ、またはステンシル処理されてから描画されます。ピクセルのステンシル値は love.graphics.stencil による影響を受けます。

O.png version 11.0 より、ステンシル・バッファの設定、または Canvas でステンシルを用いるときは love.graphics.setCanvas で指定してください。この場合、 love.graphics.setCanvas{canvas, stencil=true} は自動作成された一時作業用のステンシル・バッファを用いるのに簡単な方法です。  


関数

概要

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 ページに掲載されています。

関連



そのほかの言語