Difference between revisions of "love.graphics.setStencilTest (日本語)"

m (引数)
m (Translation updated)
Line 29: 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(1, 0, 0, 0.45)
+
     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, 0.45)
+
     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, 255, 0, 0.45)
+
     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 55: Line 73:
 
</source>
 
</source>
  
=== 穴の開いた円を描画します。 ===
+
=== 穴の開いた円の描画 ===
 
<source lang="lua">
 
<source lang="lua">
 
local function myStencilFunction()
 
local function myStencilFunction()
Line 63: Line 81:
  
 
function love.draw()
 
function love.draw()
   -- 円に接触している各ピクセルのステンシル値は 1 に設定されます。それ以外は 0 です。
+
   -- Each pixel touched by the circle will have its stencil value set to 1. The rest will be 0.
 
   love.graphics.stencil(myStencilFunction, "replace", 1)
 
   love.graphics.stencil(myStencilFunction, "replace", 1)
  
Line 74: Line 92:
 
</source>
 
</source>
  
=== 異なる色で 2 つのマスクされた三角形を描画します。 ===
+
=== 異色でマスクした三角形二種を描画 ===
 
<source lang="lua">
 
<source lang="lua">
 
local function myStencilFunction()
 
local function myStencilFunction()
Line 81: 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(0.6, 0, 0.5)
 
   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(0.55, 0.85, 0.5)
 
   love.graphics.setColor(0.55, 0.85, 0.5)
Line 100: 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 (日本語)]]

Revision as of 09:41, 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()
   -- Each pixel touched by the circle will have its stencil value set to 1. The rest will be 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 ページに掲載されています。

関連



そのほかの言語