love.graphics.newArrayImage (日本語)

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

アレイイメージ を新規作成します。

O.png すべてのシステムでアレイ・イメージに対応しているとは限りません。必ず love.graphics.getTextureTypes で確認してください!  


O.png この関数は love.update または love.draw などから繰り返し呼び出すと動作が重くなることがあります。もし、特定の資源を何度も使う必要がある場合は、一括で作成と格納を行うことで効率的に再利用できます!  



アレイ・イメージやアレイ・テクスチャは二次元サブイメージ ('レイヤ' または 'スライス') の集合体から構成される単一オブジェクトです。テクスチャ・アトラス、またはスプライト・シートと同じものであること考えられますが、テクスチャアトラスにおいて同一タイルや Quad から発生する副産物に悩まされることがありません。ただし、全サブ画像を必ず同一寸法にしてください。

アレイ・イメージで指定されたレイヤは love.graphics.drawLayer / love.graphics.drawLayer または、 love.graphics.drawQuad による異形と Quad:setLayer または、あるいはカスタムシェーダで描画されます。

シェーダでアレイ・イメージを使うには、 ArrayImage または sampler2DArray 型を宣言します (Image または sampler2D ではない)。 アレイ・イメージのスライスからピクセルの配色を取得するにはテクセル (ArrayImage image, vec3 texturecoord) シェーダ関数を使用します。vec3 変数において、最初の二種類の構成要素にはテクスチャ座標を、三番目の構成要素には基数 0 のスライス・インデックスがあります。

関数

Array Image オブジェクトの各種スライスへ違ったファイルを指定することでアレイ・イメージを作成します。

概要

image = love.graphics.newArrayImage( slices, settings )

引数

table slices
画像へのファイルパス (または File, FileData, ImageData, または CompressedImageData オブジェクト)をテーブルへ配列として記述します。各サブ画像は必ず同一寸法にしてください。テーブルには入れ子テーブルを指定することもできます。下位テーブルのスライス・インデックスに関しては下位テーブルごとに全てのミップマップレベルがあります。
table settings (nil)
アレイ・イメージ構成用のオプション設定テーブルには下記のフィールドを記述します:
boolean mipmaps (false)
true ならば画像にミップマップを適用しますが、 false ならば適用しません。圧縮テクスチャ形式の画像でなければ、ミップマップを自動生成します。
boolean linear (false)
true ならばガンマ補正レンダリングの有効時、画像のピクセルを sRGB ではなく線形で扱います。ほとんどの画像は sRGB 形式で制作されています。
number dpiscale (1)
アレイ・イメージの描画時と getWidth / getHeight の呼び出し時に用いる DPI 縮尺比率。

返値

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

関連



そのほかの言語