Difference between revisions of "love.graphics.newArrayImage (日本語)"
m |
|||
(One intermediate revision by the same user not shown) | |||
Line 6: | Line 6: | ||
アレイ・イメージやアレイ・テクスチャは二次元サブイメージ ('レイヤ' または 'スライス') の集合体から構成される単一オブジェクトです。テクスチャ・アトラス、またはスプライト・シートと同じものであること考えられますが、テクスチャアトラスにおいて同一タイルや Quad から発生する副産物に悩まされることがありません。ただし、全サブ画像を必ず同一寸法にしてください。 | アレイ・イメージやアレイ・テクスチャは二次元サブイメージ ('レイヤ' または 'スライス') の集合体から構成される単一オブジェクトです。テクスチャ・アトラス、またはスプライト・シートと同じものであること考えられますが、テクスチャアトラスにおいて同一タイルや Quad から発生する副産物に悩まされることがありません。ただし、全サブ画像を必ず同一寸法にしてください。 | ||
− | アレイ・イメージで指定されたレイヤは [[love.graphics.drawLayer (日本語)|love.graphics.drawLayer]] / [[SpriteBatch:addLayer (日本語)| | + | アレイ・イメージで指定されたレイヤは [[love.graphics.drawLayer (日本語)|love.graphics.drawLayer]] / [[SpriteBatch:addLayer (日本語)|SpriteBatch:addLayer]] または、 [[love.graphics.draw (日本語)|love.graphics.draw]] の [[Quad (日本語)|Quad]] による異形と [[Quad:setLayer (日本語)|Quad:setLayer]] または、あるいはカスタムシェーダで描画されます。 |
シェーダでアレイ・イメージを使うには、 <code>ArrayImage</code> または <code>sampler2DArray</code> 型を宣言します (<code>Image</code> または <code>sampler2D</code> ではない)。 アレイ・イメージのスライスからピクセルの配色を取得するにはテクセル (ArrayImage image, vec3 texturecoord) シェーダ関数を使用します。vec3 変数において、最初の二種類の構成要素にはテクスチャ座標を、三番目の構成要素には基数 0 のスライス・インデックスがあります。 | シェーダでアレイ・イメージを使うには、 <code>ArrayImage</code> または <code>sampler2DArray</code> 型を宣言します (<code>Image</code> または <code>sampler2D</code> ではない)。 アレイ・イメージのスライスからピクセルの配色を取得するにはテクセル (ArrayImage image, vec3 texturecoord) シェーダ関数を使用します。vec3 変数において、最初の二種類の構成要素にはテクスチャ座標を、三番目の構成要素には基数 0 のスライス・インデックスがあります。 | ||
Line 26: | Line 26: | ||
== 注釈 == | == 注釈 == | ||
− | アレイ・イメージの動作方法に関する図解: [http://codeflow.org/entries/2010/dec/09/minecraft-like-rendering-experiments-in-opengl-4/illustrations/textures.jpg] | + | アレイ・イメージの動作方法に関する図解: [https://web.archive.org/web/20191118024004/http://codeflow.org/entries/2010/dec/09/minecraft-like-rendering-experiments-in-opengl-4/illustrations/textures.jpg] |
DPI 縮尺比率が 2 (標準ピクセル密度二倍) ならば、結果として DPI 縮尺比率が 1 となるピクセル寸法の半分に対して画面上の同一空間の画像となります。画面上において同一空間ではあるが、異なるピクセル密度から構成される画像アセットを簡単に入れ替えることができるようになります。つまり、わずかなコード・ロジックの記述だけで高解像度・ Retina 解像度へ対応するようになります。 | DPI 縮尺比率が 2 (標準ピクセル密度二倍) ならば、結果として DPI 縮尺比率が 1 となるピクセル寸法の半分に対して画面上の同一空間の画像となります。画面上において同一空間ではあるが、異なるピクセル密度から構成される画像アセットを簡単に入れ替えることができるようになります。つまり、わずかなコード・ロジックの記述だけで高解像度・ Retina 解像度へ対応するようになります。 |
Latest revision as of 03:25, 18 July 2023
LÖVE 11.0 から使用可能 |
この関数は以前のバージョンでは非対応です。 |
すべてのシステムでアレイ・イメージに対応しているとは限りません。必ず love.graphics.getTextureTypes で確認してください! |
この関数は love.update または love.draw などから繰り返し呼び出すと動作が重くなることがあります。もし、特定の資源を何度も使う必要がある場合は、一括で作成と格納を行うことで効率的に再利用できます! |
アレイ・イメージやアレイ・テクスチャは二次元サブイメージ ('レイヤ' または 'スライス') の集合体から構成される単一オブジェクトです。テクスチャ・アトラス、またはスプライト・シートと同じものであること考えられますが、テクスチャアトラスにおいて同一タイルや Quad から発生する副産物に悩まされることがありません。ただし、全サブ画像を必ず同一寸法にしてください。
アレイ・イメージで指定されたレイヤは love.graphics.drawLayer / SpriteBatch:addLayer または、 love.graphics.draw の Quad による異形と Quad:setLayer または、あるいはカスタムシェーダで描画されます。
シェーダでアレイ・イメージを使うには、 ArrayImage
または sampler2DArray
型を宣言します (Image
または sampler2D
ではない)。 アレイ・イメージのスライスからピクセルの配色を取得するにはテクセル (ArrayImage image, vec3 texturecoord) シェーダ関数を使用します。vec3 変数において、最初の二種類の構成要素にはテクスチャ座標を、三番目の構成要素には基数 0 のスライス・インデックスがあります。
Contents
関数
Array Image オブジェクトの各種スライスへ違ったファイルを指定することでアレイ・イメージを作成します。
概要
image = love.graphics.newArrayImage( slices, settings )
引数
table slices
- 画像へのファイルパス (または File, FileData, ImageData, または CompressedImageData オブジェクト)をテーブルへ配列として記述します。各サブ画像は必ず同一寸法にしてください。テーブルには入れ子テーブルを指定することもできます。下位テーブルのスライス・インデックスに関しては下位テーブルごとに全てのミップマップレベルがあります。
table settings (nil)
- アレイ・イメージ構成用のオプション設定テーブルには下記のフィールドを記述します:
返値
Image image
- アレイ・イメージ (Array Image) のオブジェクト
注釈
アレイ・イメージの動作方法に関する図解: [1]
DPI 縮尺比率が 2 (標準ピクセル密度二倍) ならば、結果として DPI 縮尺比率が 1 となるピクセル寸法の半分に対して画面上の同一空間の画像となります。画面上において同一空間ではあるが、異なるピクセル密度から構成される画像アセットを簡単に入れ替えることができるようになります。つまり、わずかなコード・ロジックの記述だけで高解像度・ Retina 解像度へ対応するようになります。
カスタム・シェーダでアレイ・テクスチャ、または非二次元テクスチャ型をメイン・テクスチャとして用いるには ピクセル・シェーダで void effect() の異形を使うか、このように MainTex を ArrayImage または sampler2DArray で宣言してください: uniform ArrayImage MainTex;
用例
アレイ・イメージを多層レイヤーへ描画します
function love.load()
local sprites = {"sprite1.png", "sprite2.png"}
image = love.graphics.newArrayImage(sprites)
end
function love.draw()
love.graphics.drawLayer(image, 1, 50, 50)
love.graphics.drawLayer(image, 2, 250, 50)
end
love.graphics.drawLayer でカスタム・シェーダを使用します
shader = love.graphics.newShader[[
uniform ArrayImage MainTex;
void effect() {
// アレイ・テクスチャが渡されたとき、テクセルはレイヤ・インデックスに対して第三構成要素のテクスチャ座標を使用します。
// LOVE がアレイ・テクスチャをレンダリングするとき love.graphics.drawLayer で指定された
// レイヤ・インデックスがあるテクスチャ座標を設定します。
love_PixelColor = Texel(MainTex, VaryingTexCoord.xyz) * VaryingColor;
}
]]
function love.load()
local sprites = {"sprite1.png", "sprite2.png"}
image = love.graphics.newArrayImage(sprites)
end
function love.draw()
love.graphics.setShader(shader)
love.graphics.drawLayer(image, 1, 50, 50)
love.graphics.drawLayer(image, 2, 250, 50)
end
関連