love.graphics.setStencilTest (日本語)

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

関連



そのほかの言語