love.graphics.polygon (Français)

Disponible depuis LÖVE 0.4.0
Ce-tte function n'est pas supporté-e par des versions plus anciennes.

Trace un polygone.

En fonction de l'argument de mode, cette fonction accepte différents arguments numériques ou une table simple d'arguments numériques. Dans tous les cas, les arguments sont interprétés comme alternants les coordonnées x et y des sommets du polygone.

O.png Lorsqu'utilisé en mode fill (remplissage), le polygone doit être convexe et simple ou des erreurs de rendus pourraient apparaître. Les fonctions love.math.triangulate et love.math.isConvex peuvent être utilisées avec 0.9.0+.  


Fonction

Synopsis

love.graphics.polygon( mode, ... )

Arguments

DrawMode (Français) mode
La façon dont le polygone doit être tracé.
number (Français) ...
Les sommets du polygone.

Retourne

Rien.

Fonction

Synopsis

love.graphics.polygon( mode, vertices )

Arguments

DrawMode (Français) mode
La façon dont le polygone doit être tracé.
table (Français) vertices
Les sommets du polygone sous forme de table.

Retourne

Rien.

Exemples

Deux façons de tracer le même triangle

Triangle tracé en utilisant love.graphics.polygon

Cet exemple montre comment passer les coordonnées explicitement et comment les passer par un table en argument.

-- Passe directement les coordonnées
love.graphics.polygon('fill', 100, 100, 200, 100, 150, 200)

-- Définit une table avec les coordonnées
-- Cette table pourrait également être construite incrémentalement
local vecteurs = {100, 100, 200, 100, 150, 200}

-- Passe la table à la fonction comme second argument
love.graphics.polygon('fill', vecteurs)

Tracer un polygone concave

local vecteurs  = {100,100, 200,100, 200,200, 300,200, 300,300, 100,300} -- forme concave en L.
local triangles = love.math.triangulate(vecteurs)

for i, triangle in ipairs(triangles) do
	love.graphics.polygon("fill", triangle)
end

Tracer un rectangle avec rotation

Voici une méthode pour tracer un rectangle avec rotation rectangle.

function drawRotatedRectangle(mode, x, y, largeur, hauteur, angle)
	local cosa, sina = math.cos(angle), math.sin(angle)

	local dx1, dy1 = hauteur*cosa,   hauteur*sina
	local dx2, dy2 = -hauteur*sina, hauteur*cosa

	local px1, py1 = x,         y
	local px2, py2 = x+dx1,     y+dy1
	local px3, py3 = x+dx1+dx2, y+dy1+dy2
	local px4, py4 = x+dx2,     y+dy2
	
	love.graphics.polygon(mode, px1,py1, px2,py2, px3,py3, px4,py4)
end

Tracer un boid tourné (triangle dirigé)

Triangle tracé en utilisant love.graphics.polygon
function drawBoid (mode, x, y, longueur, largeur, angle) -- position, longueur, largeur et angle
	love.graphics.push()
	love.graphics.translate(x, y)
	love.graphics.rotate( angle )
	love.graphics.polygon(mode, -longueur/2, -largeur /2, -longueur/2, largeur /2, longueur/2, 0)
	love.graphics.pop() 
end
x, y, angle = 200, 100, math.pi/4
drawBoid ("fill", x, y, 20, 10 , angle)

Hexadécagone Pixel-perfect

Hexadécagone utilisant love.graphics.polygon

Pour un meilleur résultat, il peut être utilisé avec le style de ligne "rough" (brut) et le filtre de canvas "nearest" (plus proche).

function hexadecagon (mode, x, y, radius) -- identique à la fonction love.graphics.circle
	local w1, w2 = math.atan(0.21), math.atan(0.72) -- valeurs magiques
	local a = radius
	local b = radius*math.sin (w1)
	local c = radius*math.cos (w2)
	local d = radius*math.sin (w2)
	local vertices = {
		 a, b,  c, d,  d, c,  b, a, 
		-b, a, -d, c, -c, d, -a, b, 
		-a,-b, -c,-d, -d,-c, -b,-a, 
		 b,-a,  d,-c,  c,-d,  a,-b}
	love.graphics.translate (x+0.5, y+0.5)
	love.graphics.polygon (mode, vertices)
	love.graphics.translate (-x-0.5, -y-0.5)
end

canvas = love.graphics.newCanvas(width, height)
canvas:setFilter("nearest", "nearest")
love.graphics.setLineStyle("rough")
love.graphics.setCanvas (canvas)
	love.graphics.setColor (0,1,0)
	hexadecagon ("line", 200, 100, 60)
love.graphics.setCanvas ()

function love.draw()
	love.graphics.setColor (1,1,1)
	love.graphics.draw (canvas)
end

Français


Autres langues