love.graphics.newMesh
Доступно начиная с LÖVE 0.9.0
Данная функция не поддерживается в более ранних версиях.
Создаёт новый Многоугольник.
Используйте Mesh:setTexture, если Многоугольник должен быть текстурирован с помощью Изображения или Поверхности при его отрисовке.
В версиях до 11.0 значения компонентов цвета и байтов находились в диапазоне от 0 до 255 вместо 0 до 1.
Эта функция может быть медленной, если вызывается многократно, например, из love.update или love.draw. Если вам нужно часто использовать определённый ресурс, создайте его один раз и сохраните где-нибудь для повторного использования!
Функция
Доступно начиная с LÖVE 0.10.0
Данный вариант не поддерживается в более ранних версиях.
Создаёт стандартный Многоугольник со заданными вершинами.
Synopsis
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- Новый многоугольник.
Функция
Доступно начиная с LÖVE 0.10.0
Данный вариант не поддерживается в более ранних версиях.
Создаёт стандартный Многоугольник со заданным количеством вершин.
Synopsis
mesh = love.graphics.newMesh( vertexcount, mode, usage )
Аргументы
number vertexcount- Общее количество вершин, которые будет использовать Многоугольник. Каждая вершина инициализируется значением
{0,0, 0,0, 1,1,1,1}. MeshDrawMode mode ("fan")- Способ использования вершин при отрисовке. По умолчанию режим "fan" подходит для простых выпуклых многоугольников.
SpriteBatchUsage usage ("dynamic")- Ожидаемое использование Многоугольника. Указанный режим использования влияет на использование памяти и производительность Многоугольника.
Возвращаемое значение
Mesh mesh- Новый многоугольник.
Примечания
Mesh:setVertices или Mesh:setVertex и Mesh:setDrawRange могут быть использованы для указания информации о вершинах после создания Многоугольника.
Функция
Доступно начиная с LÖVE 0.10.0
Данный вариант не поддерживается в более ранних версиях.
Создаёт Многоугольник с настраиваемыми атрибутами вершин и заданными данными вершин.
Synopsis
mesh = love.graphics.newMesh( vertexformat, vertices, mode, usage )
Аргументы
table vertexformat- Таблица в формате
{attribute, ...}. Каждый атрибут – это таблица, которая определяет настраиваемый атрибут вершины, используемый для каждой вершины.table attribute- Таблица, содержащая имя атрибута, его тип данных и количество компонентов в атрибуте в формате
{name, datatype, components}. table ...- Дополнительные таблицы формата атрибутов вершин.
table vertices- Таблица, заполненная таблицами информации о вершинах для каждой вершины, в формате
{vertex, ...}где каждая вершина – это таблица в формате{attributecomponent, ...}.number attributecomponent- Первый компонент первого атрибута вершины в вершине.
number ...- Дополнительные компоненты всех атрибутов вершины в вершине.
MeshDrawMode mode ("fan")- Способ использования вершин при отрисовке. По умолчанию режим "fan" подходит для простых выпуклых многоугольников.
SpriteBatchUsage usage ("dynamic")- Ожидаемое использование Многоугольника. Указанный режим использования влияет на использование памяти и производительность Многоугольника.
Возвращаемое значение
Mesh mesh- Новый многоугольник.
Примечания
Значения в каждой таблице вершин расположены в том же порядке, что и атрибуты вершин в указанном формате вершин. Если для определённого компонента атрибута вершины не указано значение, он будет установлен по умолчанию в 0, если его тип данных – "float", или в 1, если тип данных – "byte".
Если тип данных атрибута – "float", компоненты могут быть в диапазоне от 1 до 4, если тип данных – "byte", он должен быть 4.
Если настраиваемый атрибут вершины использует имя "VertexPosition", "VertexTexCoord" или "VertexColor", данные вершин для этого атрибута вершины будут использоваться для стандартных позиций вершин, координат текстуры или цветов вершин соответственно при отрисовке Многоугольника. В противном случае требуется Vertex Shader, чтобы использовать атрибут вершины при отрисовке Многоугольника.
Многоугольник обязательно должен иметь атрибут "VertexPosition", чтобы быть отрисованным, но его можно прикрепить из другого Многоугольника с помощью Mesh:attachAttribute.
Чтобы использовать настраиваемый атрибут вершины с именем в Vertex Shader, он должен быть объявлен как attribute переменная с таким же именем. Переменные могут быть отправлены из Vertex Shader кода в Pixel Shader код с помощью varying переменной. Например:
Код Vertex Shader
attribute vec2 CoolVertexAttribute;
varying vec2 CoolVariable;
vec4 position(mat4 transform_projection, vec4 vertex_position)
{
CoolVariable = CoolVertexAttribute;
return transform_projection * vertex_position;
} Код Pixel Shader
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
Данный вариант не поддерживается в более ранних версиях.
Создаёт Многоугольник с настраиваемыми атрибутами вершин и заданным количеством вершин.
Synopsis
mesh = love.graphics.newMesh( vertexformat, vertexcount, mode, usage )
Аргументы
table vertexformat- Таблица в формате
{attribute, ...}. Каждый атрибут – это таблица, которая определяет настраиваемый атрибут вершины, используемый для каждой вершины.table attribute- Таблица, содержащая имя атрибута, его тип данных и количество компонентов в атрибуте в формате
{name, datatype, components}. table ...- Дополнительные таблицы формата атрибутов вершин.
number vertexcount- Общее количество вершин, которые будет использовать Многоугольник.
MeshDrawMode mode ("fan")- Способ использования вершин при отрисовке. По умолчанию режим "fan" подходит для простых выпуклых многоугольников.
SpriteBatchUsage usage ("dynamic")- Ожидаемое использование Многоугольника. Указанный режим использования влияет на использование памяти и производительность Многоугольника.
Возвращаемое значение
Mesh mesh- Новый многоугольник.
Примечания
Mesh:setVertices или Mesh:setVertex и Mesh:setDrawRange могут быть использованы для указания информации о вершинах после создания Многоугольника.
Если тип данных атрибута – "float", компоненты могут быть в диапазоне от 1 до 4, если тип данных – "byte", он должен быть 4.
Если настраиваемый атрибут вершины использует имя "VertexPosition", "VertexTexCoord" или "VertexColor", данные вершин для этого атрибута вершины будут использоваться для стандартных позиций вершин, координат текстуры или цветов вершин соответственно при отрисовке Многоугольника. В противном случае требуется Vertex Shader, чтобы использовать атрибут вершины при отрисовке Многоугольника.
Многоугольник обязательно должен иметь атрибут "VertexPosition", чтобы быть отрисованным, но его можно прикрепить из другого Многоугольника с помощью Mesh:attachAttribute.
Функция
Удалено в LÖVE 0.10.0
Данный вариант не поддерживается в этой и более поздних версиях.
Synopsis
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] (255)- Красный компонент цвета.
number [6] (255)- Зелёный компонент цвета.
number [7] (255)- Синий компонент цвета.
number [8] (255)- Альфа-компонент цвета.
Texture texture (nil)- Изображение или Поверхность для использования при отрисовке Многоугольника. Может быть nil, чтобы не использовать текстуру.
MeshDrawMode mode ("fan")- Способ использования вершин при отрисовке. По умолчанию режим "fan" подходит для простых выпуклых многоугольников.
Возвращаемое значение
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, 255,255,255,255}. Texture texture (nil)- Изображение или Поверхность для использования при отрисовке Mesh. Может быть 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 = {
{
-- top-left corner (red-tinted)
0, 0, -- position of the vertex
0, 0, -- texture coordinate at the vertex position
1, 0, 0, -- color of the vertex
},
{
-- top-right corner (green-tinted)
image:getWidth(), 0,
1, 0, -- texture coordinates are in the range of [0, 1]
0, 1, 0
},
{
-- bottom-right corner (blue-tinted)
image:getWidth(), image:getHeight(),
1, 1,
0, 0, 1
},
{
-- bottom-left corner (yellow-tinted)
0, image:getHeight(),
0, 1,
1, 1, 0
},
}
-- the Mesh DrawMode "fan" works well for 4-vertex Meshes.
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 = {}
-- The first vertex is at the center, and has a red tint. We're centering the circle around the origin (0, 0).
table.insert(vertices, {0, 0, 0.5, 0.5, 255, 0, 0})
-- Create the vertices at the edge of the circle.
for i=0, segments do
local angle = (i / segments) * math.pi * 2
-- Unit-circle.
local x = math.cos(angle)
local y = math.sin(angle)
-- Our position is in the range of [-1, 1] but we want the texture coordinate to be in the range of [0, 1].
local u = (x + 1) * 0.5
local v = (y + 1) * 0.5
-- The per-vertex color defaults to white.
table.insert(vertices, {x, y, u, v})
end
-- The "fan" draw mode is perfect for our circle.
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()
-- We created a unit-circle, so we can use the scale parameter for the radius directly.
love.graphics.draw(mesh, mx, my, 0, radius, radius)
end Создаёт круг и отрисовывает его более эффективно, чем love.graphics.circle.
function CreateCircle(segments)
segments = segments or 40
local vertices = {}
-- The first vertex is at the origin (0, 0) and will be the center of the circle.
table.insert(vertices, {0, 0})
-- Create the vertices at the edge of the circle.
for i=0, segments do
local angle = (i / segments) * math.pi * 2
-- Unit-circle.
local x = math.cos(angle)
local y = math.sin(angle)
table.insert(vertices, {x, y})
end
-- The "fan" draw mode is perfect for our circle.
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()
-- We created a unit-circle, so we can use the scale parameter for the radius directly.
love.graphics.draw(mesh, mx, my, 0, radius, radius)
end См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.graphics.newMesh