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

m
(translation updated.)
 
(4 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
[[Canvas (日本語)|Canvas]] へ描画操作を取り込みます。
 
[[Canvas (日本語)|Canvas]] へ描画操作を取り込みます。
 
== 関数 ==
 
== 関数 ==
指定された [[Canvas (日本語)|Canvas]] へ表示対象を設定します。全ての描画操作は次の ''love.graphics.setCanvas'' が呼ばれるまで指定された [[Canvas (日本語)|Canvas]] へ転送されますが画面には表示されません。
+
指定の [[Canvas (日本語)|Canvas]] へ表示対象を設定します。次回の ''love.graphics.setCanvas'' が呼ばれるまで全描画操作は指定の [[Canvas (日本語)|Canvas]] へ転送されますが、画面には表示されません。
 +
 
 +
現在使用中の Canvas で[[love.graphics.stencil (日本語)|ステンシル]]または[[love.graphics.setDepthMode (日本語)|深度テスト]]を行うときは、後述の setCanvas の異形によりステンシルバッファあるいは深度バッファを明示的に有効にしてください。
 +
 
 +
''[[love.graphics.present (日本語)|love.graphics.present]]'' を呼び出すときは Canvas を有効にしないように注意してください。 ''love.graphics.present'' はデフォルトの [[love.run (日本語)|love.run]] に記述されている [[love.draw (日本語)|love.draw]] の処理終了時に呼び出されます。したがって、この関数を用いて Canvas を使用可能にするならば、通常は ''love.draw'' の処理終了前の時点で Canvas を必ず無効にしてください。
 
=== 概要 ===
 
=== 概要 ===
 
<source lang="lua">
 
<source lang="lua">
love.graphics.setCanvas( canvas )
+
love.graphics.setCanvas( canvas, mipmap )
 
</source>
 
</source>
 
=== 引数 ===
 
=== 引数 ===
{{param|Canvas|canvas|新規対象。}}
+
{{param|Canvas|canvas|新規表示対象。}}
=== 関連 ===
+
{{New feature (日本語)|11.0|
 +
{{param|number|mipmap (1)|Canvas の[[Texture:getMipmapCount (日本語)|ミップマップ]]に対するレンダリング先のミップマップレベル。}}
 +
}}
 +
=== 返値 ===
 
ありません。
 
ありません。
  
Line 20: Line 27:
 
=== 引数 ===
 
=== 引数 ===
 
なし。
 
なし。
=== 関連 ===
+
=== 返値 ===
 
ありません。
 
ありません。
  
 
== 関数 ==
 
== 関数 ==
 
{{newin (日本語)|[[0.9.0]]|090|type=異形}}
 
{{newin (日本語)|[[0.9.0]]|090|type=異形}}
複数同時に [[Canvas(日本語)|Canvas]] の表示対象を設定します。全ての描画操作は次の ''love.graphics.setCanvas'' が呼ばれるまで指定されたキャンバスへ転送されますが画面には表示されません。
+
複数同時に [[TextureType(日本語)|二次元]] [[Canvas (日本語)|Canvas]] の表示対象を設定します。次回の ''love.graphics.setCanvas'' が呼ばれるまで全描画操作は指定された [[Canvas (日本語)|Canvas]] へ転送されますが、画面には表示されません。
 
=== 概要 ===
 
=== 概要 ===
 
<source lang="lua">
 
<source lang="lua">
Line 33: Line 40:
 
{{param|Canvas|canvas1|最初の表示対象。}}
 
{{param|Canvas|canvas1|最初の表示対象。}}
 
{{param|Canvas|canvas2|次の表示対象。}}
 
{{param|Canvas|canvas2|次の表示対象。}}
{{param|Canvas|...|追加のキャンバス。}}
+
{{param|Canvas|...|追加の Canvas を続けて記述します。}}
 +
=== 返値 ===
 +
ありません。
 +
=== 注釈 ===
 +
通常、全描画操作は関数に渡された最初の Canvas だけに描画されますが、標準 <code>void  effect</code> の代わりに [[love.graphics.newShader (日本語)#Pixel_Shader_Function|<code>vec4 effects</code> 関数]]を用いると[[Shader (日本語)|ピクセルシェーダー]]を変更します。
 +
 
 +
引数 Canvas で指定した表示対象の幅、高さ、および[[TextureMode (日本語)|テクスチャ形式]]は全て同一にしてください。全てのコンピューターが Canvas への複数表示対象に対応しているわけではありません。 [[love.graphics.isSupported (日本語)|love.graphics.isSupported("multicanvas")]] で true が返されたときは、最低でもキャンバスの 4 枚同時有効に対応しています。
 +
 
 +
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
指定された[[TextureType (日本語)|レイヤー/スライス]]へのレンダリング対象と指定された非二次元 [[Canvas (日本語)|Canvas]] の[[Texture:getMipmapCount (日本語)|ミップマップレベル]]を設定します。次回の ''love.graphics.setCanvas'' が呼ばれるまで全描画操作は指定された [[Canvas (日本語)|Canvas]] へ転送されますが、画面には表示されません。
 +
=== 概要 ===
 +
<source lang="lua">
 +
love.graphics.setCanvas( canvas, slice, mipmap )
 +
</source>
 +
=== 引数 ===
 +
{{param|Canvas|canvas|新規レンダリング対象。}}
 +
{{param|number|slice|cubemap ならば、これはレンダリング先のキューブマップ・インデックスです (1 ~ 6までの範囲)。アレイ・テクスチャならば、これは[[Texture:getLayerCount (日本語)|アレイ・レイヤ]]です。ボリューム・テクスチャならば、これは深度スライスです。二次元 Canvas ならば必ず 1 の値を用いてください。}}
 +
{{param|number|mipmap (1)|Canvas の[[Texture:getMipmapCount (日本語)|ミップマップ]]に対するレンダリング先のミップマップレベルです。}}
 +
=== 返値 ===
 +
ありません。
 +
 
 +
== 関数 ==
 +
{{newin (日本語)|[[11.0 (日本語)|11.0]]|110|type=異形}}
 +
レンダリング対象の有効化、およびステンシルの有効化と指定された設定情報に基づき深度バッファの設定を行います。次回の ''love.graphics.setCanvas'' が呼ばれるまで全描画操作は指定された [[Canvas (日本語)|Canvas]] へ転送されますが、画面には表示されません。
 +
=== 概要 ===
 +
<source lang="lua">
 +
love.graphics.setCanvas( setup )
 +
</source>
 
=== 引数 ===
 
=== 引数 ===
 +
{{param|table|setup|有効な Canvas, ミップマップレベルと適用可能ならば有効なレイヤ、そしてステンシルや深度バッファの使用有無をテーブルで指定します。}}
 +
{{subparam|RenderTargetSetup|[1]|レンダリング先の Canvas です。}}
 +
{{subparam|RenderTargetSetup|[2] (nil)|複数同時にレンダリング対象が必要ならば、レンダリング先の追加 Canvas を記述します。}}
 +
{{subparam|RenderTargetSetup|...|さらに複数同時にレンダリング対象が必要ならば、レンダリング先の追加 Canvas を記述します。}}
 +
{{subparam|boolean|stencil (false)|<code>depthstencil</code> フィールドが未設定の場合、内部管理によるステンシル・バッファを使用するかどうか。}}
 +
{{subparam|boolean|depth (false)|<code>depthstencil</code> フィールドが未設定の場合、内部管理による深度バッファを使用するかどうか。}}
 +
{{subparam|RenderTargetSetup|depthstencil (nil)|深度やステンシルバッファで用いるオプションのカスタムの深度/ステンシル[[PixelFormat (日本語)|整形済み]]の Canvas です。}}
 +
=== 返値 ===
 
ありません。
 
ありません。
 
=== 注釈 ===
 
=== 注釈 ===
通常は同じ物が各キャンバスに描画されますが、[[Shader (日本語)|ピクセルシェーダー]]は標準 <code>effect</code> の代わりに [[love.graphics.newShader (日本語)#Pixel_Shader_Function|<code>effects</code> 関数]]を使用する場合は変更できます。
+
<code>RenderTargetSetup</code> の引数には [[Canvas (日本語)|Canvas]] オブジェクト、または次の形式にて記したテーブルを指定できます: <code>{canvas, mipmap=#, layer=#, face=#}</code>
 
+
{{param|Canvas|[1]|有効なレンダリング対象として用いる Canvas です。}}
全てのキャンバスの引数は必ず同じ幅と高さおよび同じテクスチャの種類です。全てのコンピューターが複数のキャンバスへの表示対象に対応しているわけではありません。 [[love.graphics.isSupported (日本語)|love.graphics.isSupported("multicanvas")]] で true が返されたときは、最低でもキャンバスの 4 枚同時有効に対応しています。
+
{{param|number|mipmap (1)|Canvas の[[Texture:getMipmapCount (日本語)|ミップマップ]]に対するレンダリング先のミップマップレベル。}}
 +
{{param|number|layer (1)|[[TextureType (日本語)|ボリュームとアレイ]]方式の Canvas に限り使用します。アレイ・テクスチャならば、これはレンダリング先の[[Texture:getLayerCount (日本語)|アレイ・レイヤ]]です。ボリューム・テクスチャならば、これは深度スライスです。}}
 +
{{param|number|face (1)|[[TextureType (日本語)|キューブマップ]]方式の Canvas に限り使用します。 レンダリング先のキューブマップ・インデックス (1 ~ 6 までの範囲)。}}
  
 
== 用例 ==
 
== 用例 ==
Line 45: Line 90:
 
<source lang="lua">
 
<source lang="lua">
 
function love.load()
 
function love.load()
    -- キャンバスの作成
+
    -- キャンバスの作成。
 
     canvas = love.graphics.newCanvas()
 
     canvas = love.graphics.newCanvas()
  
    -- 直接的にキャンバスへ描画操作を行います
+
    -- 直接的にキャンバスへ描画操作を行います。
 
     love.graphics.setCanvas(canvas)
 
     love.graphics.setCanvas(canvas)
  
    -- 色付きの正方形を描画します
+
    -- 色付きの正方形を描画します。
     love.graphics.setColor(230,240,120)
+
     love.graphics.setColor(0.8, 0.9, 0.4)
     love.graphics.rectangle('fill',0,0,100,100)
+
     love.graphics.rectangle("fill", 0, 0, 100, 100)
  
    -- メイン画面への描画を再び有効にします。
+
    -- メイン画面への描画を再び有効にします。
 
     love.graphics.setCanvas()
 
     love.graphics.setCanvas()
 
end
 
end
  
 
function love.draw()
 
function love.draw()
    -- 拡大したキャンバスを画面へ描画します。
+
    -- 拡大したキャンバスを画面へ描画します。
     love.graphics.setColor(255,255,255)
+
     love.graphics.setColor(1, 1, 1)
     love.graphics.draw(canvas, 200,100, 0, .5,.5)
+
     love.graphics.draw(canvas, 200, 100, 0, 0.5, 0.5)
 
end
 
end
 +
</source>
 +
 +
 +
=== love.graphics.setCanvas の異形テーブルによる高度な設定 ===
 +
<source lang="lua">
 +
-- 指定の Canvas を描画するときに love.graphics.stencil を呼び出せるようにします。
 +
love.graphics.setCanvas({canvas, stencil=true})
 +
 +
-- アレイテクスチャ方式の複数 Canvas 描画時、およびカスタム深度バッファも
 +
-- 併せて用いるときに複数同時にレンダリング対象を使用します。
 +
canvas1 = love.graphics.newCanvas(128, 128, 4, {type="array"})
 +
canvas2 = love.graphics.newCanvas(128, 128, 8, {type="array"})
 +
depthcanvas = love.graphics.newCanvas(128, 128, {format="depth24", readable=true})
 +
 +
love.graphics.setCanvas({
 +
    {canvas1, layer = 3},
 +
    {canvas2, layer = 1},
 +
    depthstencil = depthcanvas,
 +
})
 
</source>
 
</source>
  
Line 78: Line 142:
  
 
== そのほかの言語 ==
 
== そのほかの言語 ==
{{i18n|love.graphics.setCanvas}}
+
{{i18n (日本語)|love.graphics.setCanvas}}

Latest revision as of 09:53, 23 July 2019

LÖVE 0.8.0 から使用可能
love.graphics.setRenderTarget から名称変更。

Canvas へ描画操作を取り込みます。

関数

指定の Canvas へ表示対象を設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定の Canvas へ転送されますが、画面には表示されません。

現在使用中の Canvas でステンシルまたは深度テストを行うときは、後述の setCanvas の異形によりステンシルバッファあるいは深度バッファを明示的に有効にしてください。

love.graphics.present を呼び出すときは Canvas を有効にしないように注意してください。 love.graphics.present はデフォルトの love.run に記述されている love.draw の処理終了時に呼び出されます。したがって、この関数を用いて Canvas を使用可能にするならば、通常は love.draw の処理終了前の時点で Canvas を必ず無効にしてください。

概要

love.graphics.setCanvas( canvas, mipmap )

引数

Canvas canvas
新規表示対象。
LÖVE 11.0 から利用可能
number mipmap (1)
Canvas のミップマップに対するレンダリング先のミップマップレベル。

返値

ありません。

関数

画面を初期状態に戻して対象を描画します。つまり、画面への描画を再び有効にします。

概要

love.graphics.setCanvas( )

引数

なし。

返値

ありません。

関数

LÖVE 0.9.0 から使用可能
この異形は以前のバージョンでは非対応です。

複数同時に 二次元 Canvas の表示対象を設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。

概要

love.graphics.setCanvas( canvas1, canvas2, ... )

引数

Canvas canvas1
最初の表示対象。
Canvas canvas2
次の表示対象。
Canvas ...
追加の Canvas を続けて記述します。

返値

ありません。

注釈

通常、全描画操作は関数に渡された最初の Canvas だけに描画されますが、標準 void effect の代わりに vec4 effects 関数を用いるとピクセルシェーダーを変更します。

引数 Canvas で指定した表示対象の幅、高さ、およびテクスチャ形式は全て同一にしてください。全てのコンピューターが Canvas への複数表示対象に対応しているわけではありません。 love.graphics.isSupported("multicanvas") で true が返されたときは、最低でもキャンバスの 4 枚同時有効に対応しています。

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

指定されたレイヤー/スライスへのレンダリング対象と指定された非二次元 Canvasミップマップレベルを設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。

概要

love.graphics.setCanvas( canvas, slice, mipmap )

引数

Canvas canvas
新規レンダリング対象。
number slice
cubemap ならば、これはレンダリング先のキューブマップ・インデックスです (1 ~ 6までの範囲)。アレイ・テクスチャならば、これはアレイ・レイヤです。ボリューム・テクスチャならば、これは深度スライスです。二次元 Canvas ならば必ず 1 の値を用いてください。
number mipmap (1)
Canvas のミップマップに対するレンダリング先のミップマップレベルです。

返値

ありません。

関数

LÖVE 11.0 から使用可能
この異形は以前のバージョンでは非対応です。

レンダリング対象の有効化、およびステンシルの有効化と指定された設定情報に基づき深度バッファの設定を行います。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。

概要

love.graphics.setCanvas( setup )

引数

table setup
有効な Canvas, ミップマップレベルと適用可能ならば有効なレイヤ、そしてステンシルや深度バッファの使用有無をテーブルで指定します。
RenderTargetSetup [1]
レンダリング先の Canvas です。
RenderTargetSetup [2] (nil)
複数同時にレンダリング対象が必要ならば、レンダリング先の追加 Canvas を記述します。
RenderTargetSetup ...
さらに複数同時にレンダリング対象が必要ならば、レンダリング先の追加 Canvas を記述します。
boolean stencil (false)
depthstencil フィールドが未設定の場合、内部管理によるステンシル・バッファを使用するかどうか。
boolean depth (false)
depthstencil フィールドが未設定の場合、内部管理による深度バッファを使用するかどうか。
RenderTargetSetup depthstencil (nil)
深度やステンシルバッファで用いるオプションのカスタムの深度/ステンシル整形済みの Canvas です。

返値

ありません。

注釈

RenderTargetSetup の引数には Canvas オブジェクト、または次の形式にて記したテーブルを指定できます: {canvas, mipmap=#, layer=#, face=#}

Canvas [1]
有効なレンダリング対象として用いる Canvas です。
number mipmap (1)
Canvas のミップマップに対するレンダリング先のミップマップレベル。
number layer (1)
ボリュームとアレイ方式の Canvas に限り使用します。アレイ・テクスチャならば、これはレンダリング先のアレイ・レイヤです。ボリューム・テクスチャならば、これは深度スライスです。
number face (1)
キューブマップ方式の Canvas に限り使用します。 レンダリング先のキューブマップ・インデックス (1 ~ 6 までの範囲)。

用例

キャンバスへの描画

function love.load()
    -- キャンバスの作成。
    canvas = love.graphics.newCanvas()

    -- 直接的にキャンバスへ描画操作を行います。
    love.graphics.setCanvas(canvas)

    -- 色付きの正方形を描画します。
    love.graphics.setColor(0.8, 0.9, 0.4)
    love.graphics.rectangle("fill", 0, 0, 100, 100)

    -- メイン画面への描画を再び有効にします。
    love.graphics.setCanvas()
end

function love.draw()
    -- 拡大したキャンバスを画面へ描画します。
    love.graphics.setColor(1, 1, 1)
    love.graphics.draw(canvas, 200, 100, 0, 0.5, 0.5)
end


love.graphics.setCanvas の異形テーブルによる高度な設定

-- 指定の Canvas を描画するときに love.graphics.stencil を呼び出せるようにします。
love.graphics.setCanvas({canvas, stencil=true})

-- アレイテクスチャ方式の複数 Canvas 描画時、およびカスタム深度バッファも
-- 併せて用いるときに複数同時にレンダリング対象を使用します。
canvas1 = love.graphics.newCanvas(128, 128, 4, {type="array"})
canvas2 = love.graphics.newCanvas(128, 128, 8, {type="array"})
depthcanvas = love.graphics.newCanvas(128, 128, {format="depth24", readable=true})

love.graphics.setCanvas({
    {canvas1, layer = 3},
    {canvas2, layer = 1},
    depthstencil = depthcanvas,
})

関連



そのほかの言語