love.graphics.drawInstanced
Доступно начиная с LÖVE 11.0
Эта функция не поддерживается в более ранних версиях.
Отрисовывает множество экземпляров сетки с помощью одного вызова отрисовки, используя аппаратное геометрическое инстанцирование.
Каждый экземпляр может иметь уникальные свойства (позиции, цвета и т.д.), но по умолчанию это не так, если не используется пользовательская тень вместе с атрибутами вершин для каждого экземпляра или love_InstanceID переменной GLSL 3 шейдера переменная шейдера, в противном случае все они будут отрисованы в одной и той же позиции друг поверх друга.
Инстанцирование не поддерживается некоторыми более старыми графическими процессорами, которые способны использовать только OpenGL ES 2 или OpenGL 2. Используйте love.graphics.getSupported для проверки.
Функция
Синопсис
love.graphics.drawInstanced( mesh, instancecount, x, y, r, sx, sy, ox, oy, kx, ky )
Аргументы
Mesh mesh- Сетка для отрисовки.
number instancecount- Количество экземпляров для отрисовки.
number x (0)- Позиция для отрисовки экземпляров (ось X).
number y (0)- Позиция для отрисовки экземпляров (ось Y).
number r (0)- Ориентация (радиан).
number sx (1)- Коэффициент масштабирования (ось X).
number sy (sx)- Коэффициент масштабирования (ось Y).
number ox (0)- Смещение начала координат (ось X).
number oy (0)- Смещение начала координат (ось Y).
number kx (0)- Коэффициент сдвига (ось X).
number ky (0)- Коэффициент сдвига (ось Y).
Возвращаемое значение
Ничего.
Функция
Синопсис
love.graphics.drawInstanced( mesh, instancecount, transform )
Аргументы
Mesh mesh- Сетка для отрисовки.
number instancecount- Количество экземпляров для отрисовки.
Transform transform- Объект преобразования.
Возвращаемое значение
Ничего.
Примеры
Использование инстанцирования атрибутов вершин для отрисовки многих треугольников в одном вызове отрисовки
-- A simple small triangle with the default position, texture coordinate, and color vertex attributes.
local vertices = {
{0, 0, 0,0, 1.0,0.2,0.2,1.0},
{20,0, 0,0, 0.2,1.0,0.2,1.0},
{20,20, 0,0, 0.2,0.2,1.0,1.0},
}
local mesh = love.graphics.newMesh(vertices, "triangles", "static")
-- Unique positions for each instance that will be rendered.
local instancepositions = {}
for y=0, love.graphics.getHeight()-1, 30 do
for x = 0, love.graphics.getWidth()-1, 30 do
local pos = {x, y}
table.insert(instancepositions, pos)
end
end
-- Create a mesh containing the per-instance position data.
-- It won't be drawn directly, but it will be referenced by the triangle's mesh.
local instancemesh = love.graphics.newMesh({{"InstancePosition", "float", 2}}, instancepositions, nil, "static")
-- When the triangle's mesh is rendered, the vertex shader will pull in a different
-- value of the InstancePosition attribute for each instance, instead of for each vertex.
mesh:attachAttribute("InstancePosition", instancemesh, "perinstance")
-- Vertex shader which uses the InstancePosition vertex attribute.
local shader = love.graphics.newShader[[
attribute vec2 InstancePosition;
vec4 position(mat4 transform_projection, vec4 vertex_position)
{
vertex_position.xy += InstancePosition;
return transform_projection * vertex_position;
}
]]
function love.draw()
love.graphics.setShader(shader)
-- Draw the mesh many times in one draw call, using instancing.
local instancecount = #instancepositions
love.graphics.drawInstanced(mesh, instancecount, 0, 0)
end См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.graphics.drawInstanced