love.graphics.drawInstanced (Français)
Disponible depuis LÖVE 11.0 |
Ce-tte function n'est pas supporté-e par des versions plus anciennes. |
Trace plusieurs instances d'un Mesh (maillage) à partir d'un unique appel de tracé, en utilisant l'instanciation géométrique matérielle.
Chauqe instance peut avoir des propriétés unique (positions, couleurs, etc) mais, ne les auront pas par défaut, à moins que'un Shader personnalisé, ainsi que soit des attributs de vecteur par instance ou bien la variable d'ombrage de vecteur love_InstanceID
GLSL 3 soit utilisé, autrement ils seront tous rendus à la même position les uns au dessus des autres.
L'instanciation n'est pas supporté par certains GPU anciens, qui ne sont pas capable d'utiliser OpenGL ES 2 ou OpenGL 2. Veuillez utiliiser love.graphics.getSupported pour le vérifier.
Contents
Fonction
Synopsis
love.graphics.drawInstanced( mesh, instancecount, x, y, r, sx, sy, ox, oy, kx, ky )
Arguments
Mesh (Français) mesh
- Maillage à rendre.
number (Français) instancecount
- Nombre d'instances à rendre.
number (Français) x (0)
- Position à laquelle les instances doivent être tracées (axe des x).
number (Français) y (0)
- Position à laquelle les instances doivent être tracées (axe des y).
number (Français) r (0)
- Orientation (radians).
number (Français) sx (1)
- Facteur d'échelle (axe des x).
number (Français) sy (sx)
- Facteur d'échelle (axe des y).
number (Français) ox (0)
- Décalage de l'origine (axe des x).
number (Français) oy (0)
- Décalage de l'origine (axe des y).
number (Français) kx (0)
- Facteur de déformation (axe des x).
number (Français) ky (0)
- Facteur de déformation (axe des y).
Retourne
Rien.
Fonction
Synopsis
love.graphics.drawInstanced( mesh, instancecount, transform )
Arguments
Mesh (Français) mesh
- Maillage à rendre.
number (Français) instancecount
- Nombre d'instances à rendre.
Transform (Français) transform
- Un objet de transformation (transform).
Retourne
Rien.
Exemples
Utiliser l'instanciation d'attributs de vecteurs pour tracer plusieurs triangles en un unique appel de tracé
-- Un simple petit triangle avec la position par défaut, les coordonnées de texture, et les attributs de couleur de vecteur.
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")
-- Positions uniques pour chaque instance qui sera rendu.
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
-- Crée un maillage contenant les données de positions par instance.
-- Il ne sera pas tracé directement, mais il sera référencé par le maillage de triangles.
local instancemesh = love.graphics.newMesh({{"InstancePosition", "float", 2}}, instancepositions, nil, "static")
-- Lorsque le maillage de triangles est rendu, l'ombrage de vecteur y mettra une valeur différente
-- de l'attribut InstancePosition (position de l'instance) pour chaque instance, plutôt que pour chaque vecteur.
mesh:attachAttribute("InstancePosition", instancemesh, "perinstance")
-- Ombrage de vecteur utilisant l'attribut de vecteur InstancePosition.
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)
-- Trace le maillage de plusieurs fois en un seul appel, en utilisant l'instanciation.
local instancecount = #instancepositions
love.graphics.drawInstanced(mesh, instancecount, 0, 0)
end
Voir également
- love.graphics (Français)
- Mesh (Français)
- Mesh:attachAttribute (Français)
- love.graphics.newShader (Français)
- GraphicsFeature (Français)
Autres langues
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info