Difference between revisions of "love.graphics.newMesh (日本語)"
m (→引数) |
m (→注釈) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 56: | Line 56: | ||
=== 引数 === | === 引数 === | ||
{{param|table|vertexformat|<code>{attribute, ...}</code> 形式のテーブル。各属性はテーブルで頂点ごとに使用されるカスタム頂点属性を指定します。}} | {{param|table|vertexformat|<code>{attribute, ...}</code> 形式のテーブル。各属性はテーブルで頂点ごとに使用されるカスタム頂点属性を指定します。}} | ||
− | {{subparam|table|attribute|[[AttributeDataType (日本語)|データ型]] | + | {{subparam|table|attribute|[[AttributeDataType (日本語)|データ型]] および、属性の成分数を <code>{name, datatype, components}</code> 形式で表記した属性の名称を有するテーブル。}} |
{{subparam|table|...|追加の頂点属性形式によるテーブル。}} | {{subparam|table|...|追加の頂点属性形式によるテーブル。}} | ||
{{param|table|vertices|各頂点は <code>{attributecomponent, ...}</code> 形式のテーブルであり、その各頂点に対する頂点情報テーブルを <code>{vertex, ...}</code> 形式で書き入れたテーブルです。}} | {{param|table|vertices|各頂点は <code>{attributecomponent, ...}</code> 形式のテーブルであり、その各頂点に対する頂点情報テーブルを <code>{vertex, ...}</code> 形式で書き入れたテーブルです。}} | ||
− | {{subparam|number|attributecomponent| | + | {{subparam|number|attributecomponent|最初の頂点にある頂点属性の第一成分。}} |
{{subparam|number|...|頂点にある全頂点属性の追加要素。}} | {{subparam|number|...|頂点にある全頂点属性の追加要素。}} | ||
{{param|MeshDrawMode|mode ("fan")|頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。}} | {{param|MeshDrawMode|mode ("fan")|頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。}} | ||
Line 67: | Line 67: | ||
{{param|Mesh|mesh|新規 Mesh です。}} | {{param|Mesh|mesh|新規 Mesh です。}} | ||
=== 注釈 === | === 注釈 === | ||
− | + | 各頂点テーブルの値は指定された頂点形式により頂点属性と同じ順序になります。特定の頂点属性成分への | |
+ | 値が未指定の場合、[[AttributeDataType (日本語)|データ型]]が "float" ならば 0 を、データ型が "byte" ならば 1 を既定値として設定します。 | ||
属性のデータ型が "float" ならば、構成要素の範囲は 1 ~ 4 までとなり、データ型が "byte" ならば、必ず 4 になります。 | 属性のデータ型が "float" ならば、構成要素の範囲は 1 ~ 4 までとなり、データ型が "byte" ならば、必ず 4 になります。 | ||
Line 118: | Line 119: | ||
{{param|Mesh|mesh|新規 Mesh です。}} | {{param|Mesh|mesh|新規 Mesh です。}} | ||
=== 注釈 === | === 注釈 === | ||
− | + | 各頂点属性成分のデータ型が "float" ならば 0 で、データ型が "byte" ならば 1 で初期化されます。[[Mesh:setVertices (日本語)|Mesh:setVertices]] または [[Mesh:setVertex (日本語)|Mesh:setVertex]] および [[Mesh:setDrawRange (日本語)|Mesh:setDrawRange]] は Mesh を作成すれば頂点情報を指定するために使用することができます。 | |
− | 属性のデータ型が "float" | + | 属性のデータ型が "float" ならば、構成成分の範囲は 1 ~ 4 までとなり、データ型が "byte" ならば、必ず 4 になります。 |
− | カスタム頂点属性で "VertexPosition", "VertexTexCoord", または "VertexColor" の名称を使用するならば、その頂点属性に関する頂点データは Mesh | + | カスタム頂点属性で "VertexPosition", "VertexTexCoord", または "VertexColor" の名称を使用するならば、その頂点属性に関する頂点データは Mesh の描画時に標準的な頂点の位置、テクスチャ座標、または各頂点の色で使用されます。それ以外での Mesh の描画時、頂点属性を使用するには[[Shader (日本語)|頂点シェーダ]]が必要になります。 |
Mesh を描画するために "VertexPosition" 属性は'''必ず'''必要ですが、 [[Mesh:attachAttribute (日本語)|Mesh:attachAttribute]] により違う Mesh からも付加することができます。 | Mesh を描画するために "VertexPosition" 属性は'''必ず'''必要ですが、 [[Mesh:attachAttribute (日本語)|Mesh:attachAttribute]] により違う Mesh からも付加することができます。 |
Latest revision as of 00:41, 10 October 2019
LÖVE 0.9.0 から使用可能 |
この関数は以前のバージョンでは非対応です。 |
Mesh の新規作成。
描画時は Mesh がテクスチャ付きの Image または Canvas ならば Mesh:setTexture を使用してください。
バージョン 11.0 以前まで、配色成分における値の範囲は小数値の 0 〜 1 ではなく整数値の 0 〜 255 です。
この関数は love.update または love.draw などから繰り返し呼び出すと動作が重くなることがあります。もし、特定の資源を何度も使う必要がある場合は、一括で作成と格納を行うことで効率的に再利用できます! |
関数
LÖVE 0.10.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
指定された頂点により標準的な Mesh を作成します。
概要
mesh = love.graphics.newMesh( vertices, mode, usage )
引数
table vertices
- 各頂点の頂点情報で以下のように書き入れられたテーブル:
number [1]
- 頂点の位置におけるテクスチャの x-座標。
number [2]
- 頂点の位置におけるテクスチャの y-座標。
number [3] (0)
- 頂点テクスチャの u 座標。通常時、テクスチャ座標は [0, 1] の範囲内ですが、それ以上またはそれ以下にできます (WrapMode を参照)。
number [4] (0)
- 頂点テクスチャの v 座標。通常時、テクスチャ座標は [0, 1] の範囲内ですが、それ以上またはそれ以下にできます (WrapMode を参照)。
number [5] (1)
- 頂点の色として赤色の成分。
number [6] (1)
- 頂点の色として緑色の成分。
number [7] (1)
- 頂点の色として青色の成分。
number [8] (1)
- 頂点の色として透過色の成分。
MeshDrawMode mode ("fan")
- 頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。
SpriteBatchUsage usage ("dynamic")
- Mesh で想定される使用方法。指定された使用方法の方式は Mesh のメモリ使用および性能に影響を与えます。
返値
Mesh mesh
- 新規 Mesh です。
関数
LÖVE 0.10.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
指定された頂点の個数により標準的な Mesh を作成します。
概要
mesh = love.graphics.newMesh( vertexcount, mode, usage )
引数
number vertexcount
- Mesh で使用する頂点の合計数。各頂点は
{0,0, 0,0, 1,1,1,1}
. にて初期化されます。 MeshDrawMode mode ("fan")
- 頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。
SpriteBatchUsage usage ("dynamic")
- Mesh で想定される使用方法。指定された使用方法の方式は Mesh のメモリ使用および性能に影響を与えます。
返値
Mesh mesh
- 新規 Mesh です。
注釈
Mesh:setVertices または Mesh:setVertex および Mesh:setDrawRange では、いったん Mesh を作成すると頂点の情報を指定するために使用することができます。
関数
LÖVE 0.10.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
カスタム頂点属性および指定された頂点データにより Mesh を作成します。
概要
mesh = love.graphics.newMesh( vertexformat, vertices, mode, usage )
引数
table vertexformat
{attribute, ...}
形式のテーブル。各属性はテーブルで頂点ごとに使用されるカスタム頂点属性を指定します。
table vertices
- 各頂点は
{attributecomponent, ...}
形式のテーブルであり、その各頂点に対する頂点情報テーブルを{vertex, ...}
形式で書き入れたテーブルです。
MeshDrawMode mode ("fan")
- 頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。
SpriteBatchUsage usage ("dynamic")
- Mesh で想定される使用方法。指定された使用方法の方式は Mesh のメモリ使用および性能に影響を与えます。
返値
Mesh mesh
- 新規 Mesh です。
注釈
各頂点テーブルの値は指定された頂点形式により頂点属性と同じ順序になります。特定の頂点属性成分への 値が未指定の場合、データ型が "float" ならば 0 を、データ型が "byte" ならば 1 を既定値として設定します。
属性のデータ型が "float" ならば、構成要素の範囲は 1 ~ 4 までとなり、データ型が "byte" ならば、必ず 4 になります。
カスタム頂点属性で "VertexPosition", "VertexTexCoord", または "VertexColor" の名称を使用するならば、その頂点属性に関する頂点データは Mesh の描画時に標準的な頂点の位置、テクスチャ座標、または各頂点の色に対して使用されます。そうでなければ Mesh を描画する場合に、頂点属性を使用するには頂点シェーダが必要になります。
Mesh を描画するために "VertexPosition" 属性は必ず必要ですが、 Mesh:attachAttribute により違う Mesh からも付加することができます。
頂点シェーダでカスタム名称の頂点属性を使用するには、同一名称の attribute
変数として宣言する必要があります。 varying
変数を作成することにより、頂点シェーダのコードからピクセルシェーダのコードへ変数を送信することができます。例えば:
頂点シェーダーのコード
attribute vec2 CoolVertexAttribute;
varying vec2 CoolVariable;
vec4 position(mat4 transform_projection, vec4 vertex_position)
{
CoolVariable = CoolVertexAttribute;
return transform_projection * vertex_position;
}
ピクセルシェーダーのコード
varying vec2 CoolVariable;
vec4 effect(vec4 color, Image tex, vec2 texcoord, vec2 pixcoord)
{
vec4 texcolor = Texel(tex, texcoord + CoolVariable);
return texcolor * color;
}
関数
LÖVE 0.10.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
カスタム頂点属性および指定された頂点の個数により Mesh を作成します。
概要
mesh = love.graphics.newMesh( vertexformat, vertexcount, mode, usage )
引数
table vertexformat
{attribute, ...}
形式のテーブル。各属性はテーブルで頂点ごとに使用されるカスタム頂点属性を指定します。
number vertexcount
- Mesh で使用する頂点の合計数。
MeshDrawMode mode ("fan")
- 頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。
SpriteBatchUsage usage ("dynamic")
- Mesh で想定される使用方法。指定された使用方法の方式は Mesh のメモリ使用および性能に影響を与えます。
返値
Mesh mesh
- 新規 Mesh です。
注釈
各頂点属性成分のデータ型が "float" ならば 0 で、データ型が "byte" ならば 1 で初期化されます。Mesh:setVertices または Mesh:setVertex および Mesh:setDrawRange は Mesh を作成すれば頂点情報を指定するために使用することができます。
属性のデータ型が "float" ならば、構成成分の範囲は 1 ~ 4 までとなり、データ型が "byte" ならば、必ず 4 になります。
カスタム頂点属性で "VertexPosition", "VertexTexCoord", または "VertexColor" の名称を使用するならば、その頂点属性に関する頂点データは Mesh の描画時に標準的な頂点の位置、テクスチャ座標、または各頂点の色で使用されます。それ以外での Mesh の描画時、頂点属性を使用するには頂点シェーダが必要になります。
Mesh を描画するために "VertexPosition" 属性は必ず必要ですが、 Mesh:attachAttribute により違う Mesh からも付加することができます。
関数
LÖVE 0.10.0 から廃止 |
この異形は以降のバージョンでは非対応です。 |
概要
mesh = love.graphics.newMesh( vertices, texture, mode )
引数
table vertices
- 各頂点の頂点情報で以下のように書き入れられたテーブル:
number [1]
- 頂点の位置におけるテクスチャの x-座標。
number [2]
- 頂点の位置におけるテクスチャの y-座標。
number [3]
- テクスチャの u 座標。通常においてテクスチャの座標は [0, 1] の範囲内ですが、それ以上またはそれ以下にできます (WrapMode を参照)。
number [4]
- テクスチャの v 座標。通常においてテクスチャの座標は [0, 1] の範囲内ですが、それ以上またはそれ以下にできます (WrapMode を参照)。
number [5] (1)
- 赤色の成分。
number [6] (1)
- 緑色の成分。
number [7] (1)
- 青色の成分。
number [8] (1)
- 透過色の成分。
Texture texture (nil)
- Mesh の描画時に使用する Image または Canvas です。 nil ならばテクスチャは使用されていません。
MeshDrawMode mode ("fan")
- 頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。
返値
Mesh mesh
- 新規 Mesh です。
関数
LÖVE 0.9.1 まで使用可能でしたが LÖVE 0.10.0 で廃止されました |
この異形は以降のバージョンでは非対応です。 |
概要
mesh = love.graphics.newMesh( vertexcount, texture, mode )
引数
number vertexcount
- Mesh で使用する頂点の合計数。各頂点は
{0,0, 0,0, 1,1,1,1}
にて初期化されます。 Texture texture (nil)
- Mesh の描画時に使用する Image または Canvas です。 nil ならばテクスチャは使用されていません。
MeshDrawMode mode ("fan")
- 頂点の描画に使用する方式。省略時の標準方式 "fan" は単一の凸面の多角形においては十分です。
返値
Mesh mesh
- 新規 Mesh です。
注釈
Mesh:setVertices または Mesh:setVertex および Mesh:setDrawRange では、いったん Mesh を作成すると頂点の情報を指定するために使用することができます。
用例
通常の画像描画と同様ですが各角は異なる色で Mesh の作成および描画を行います。
function love.load()
image = love.graphics.newImage("pig.png")
local vertices = {
{
-- 左上角 (赤色)
0, 0, -- 頂点の位置。
0, 0, -- 頂点の位置におけるテクスチャの座標。
1, 0, 0, -- 頂点の色。
},
{
-- 右上角 (緑色)
image:getWidth(), 0,
1, 0, -- テクスチャの座標範囲は [0, 1]
0, 1, 0
},
{
-- 右下角 (青色)
image:getWidth(), image:getHeight(),
1, 1,
0, 0, 1
},
{
-- 左下角 (黄色)
0, image:getHeight(),
0, 1,
1, 1, 0
},
}
-- Mesh の DrawMode である "fan" は 4 つの頂点がある Mesh に対して正常に動作します。
mesh = love.graphics.newMesh(vertices, "fan")
mesh:setTexture(image)
end
function love.draw()
love.graphics.draw(mesh, 0, 0)
end
中心に赤色の円があるテクスチャが貼られた円を作成して描画します。
function CreateTexturedCircle(image, segments)
segments = segments or 40
local vertices = {}
-- 最初の頂点は中心にあり赤色です。原点 (0, 0) の周囲に円を中央揃えします。
table.insert(vertices, {0, 0, 0.5, 0.5, 1, 0, 0})
-- 円の角にある頂点を作成します。
for i=0, segments do
local angle = (i / segments) * math.pi * 2
-- 単数の円形。
local x = math.cos(angle)
local y = math.sin(angle)
-- 位置の範囲は [-1, 1] となっていますが、必要とするテクスチャの座標範囲は [0, 1] です。
local u = (x + 1) * 0.5
local v = (y + 1) * 0.5
-- 各頂点の標準色は白です。
table.insert(vertices, {x, y, u, v})
end
-- 描画方式 "fan" は円を描くには十分です。
local mesh = love.graphics.newMesh(vertices, "fan")
mesh:setTexture(image)
return mesh
end
function love.load()
image = love.graphics.newImage("pig.png")
mesh = CreateTexturedCircle(image)
end
function love.draw()
local radius = 100
local mx, my = love.mouse.getPosition()
-- 単数円形を作成したので、半径に対する尺度変更引数を直接使用できます。
love.graphics.draw(mesh, mx, my, 0, radius, radius)
end
love.graphics.circle より効率的に円を作成して描画します。
function CreateCircle(segments)
segments = segments or 40
local vertices = {}
-- 最初の頂点にある原点は (0, 0) であり円は中心に置かれます。
table.insert(vertices, {0, 0})
-- 円の角にある頂点を作成します。
for i=0, segments do
local angle = (i / segments) * math.pi * 2
-- 単数の円形。
local x = math.cos(angle)
local y = math.sin(angle)
table.insert(vertices, {x, y})
end
-- 描画方式 "fan" は円を描くには十分です。
return love.graphics.newMesh(vertices, "fan")
end
function love.load()
mesh = CreateCircle()
end
function love.draw()
local radius = 100
local mx, my = love.mouse.getPosition()
-- 単数の円形を作成したので、半径に対する尺度変更引数を直接使用できます。
love.graphics.draw(mesh, mx, my, 0, radius, radius)
end
関数