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

m
m
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 41: Line 41:
 
     love.graphics.setStencilTest("greater", 0)
 
     love.graphics.setStencilTest("greater", 0)
  
     love.graphics.setColor(255, 0, 0, 120)
+
     love.graphics.setColor(1, 0, 0, 0.45)
 
     love.graphics.circle("fill", 300, 300, 150, 50)
 
     love.graphics.circle("fill", 300, 300, 150, 50)
  
     love.graphics.setColor(0, 255, 0, 120)
+
     love.graphics.setColor(0, 255, 0, 0.45)
 
     love.graphics.circle("fill", 500, 300, 150, 50)
 
     love.graphics.circle("fill", 500, 300, 150, 50)
  
     love.graphics.setColor(0, 0, 255, 120)
+
     love.graphics.setColor(0, 255, 0, 0.45)
 
     love.graphics.circle("fill", 400, 400, 150, 50)
 
     love.graphics.circle("fill", 400, 400, 150, 50)
  
Line 85: Line 85:
 
   -- 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)
  

Revision as of 10:45, 17 July 2019

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 myStencilFunction()
   love.graphics.rectangle("fill", 225, 200, 350, 300)
end

function love.draw()
    -- ステンシルで長方形を描画します。長方形に接触している各ピクセルのステンシル値は 1 に設定されます。それ以外は 0 です。
    love.graphics.stencil(myStencilFunction, "replace", 1)

    -- 0 より大きいステンシル値を有するピクセルのみ表示を許可します。
    love.graphics.setStencilTest("greater", 0)

    love.graphics.setColor(1, 0, 0, 0.45)
    love.graphics.circle("fill", 300, 300, 150, 50)

    love.graphics.setColor(0, 255, 0, 0.45)
    love.graphics.circle("fill", 500, 300, 150, 50)

    love.graphics.setColor(0, 255, 0, 0.45)
    love.graphics.circle("fill", 400, 400, 150, 50)

    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

異なる色で 2 つのマスクされた三角形を描画します。

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

関数



そのほかの言語