Difference between revisions of "love.graphics.polygon (Français)"
(→Tracer un boid tourné (triangle dirigé)) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 36: | Line 36: | ||
-- Définit une table avec les coordonnées | -- Définit une table avec les coordonnées | ||
-- Cette table pourrait également être construite incrémentalement | -- Cette table pourrait également être construite incrémentalement | ||
− | local | + | local vecteurs = {100, 100, 200, 100, 150, 200} |
-- Passe la table à la fonction comme second argument | -- Passe la table à la fonction comme second argument | ||
− | love.graphics.polygon('fill', vertices) | + | love.graphics.polygon('fill', vecteurs) |
+ | </source> | ||
+ | |||
+ | === Tracer un polygone concave === | ||
+ | <source lang="lua"> | ||
+ | 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 | ||
+ | </source> | ||
+ | |||
+ | === Tracer un rectangle avec rotation === | ||
+ | Voici une méthode pour tracer un rectangle avec rotation [[love.graphics.rectangle|rectangle]]. | ||
+ | |||
+ | <source lang="lua"> | ||
+ | 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 | ||
+ | </source> | ||
+ | |||
+ | === Tracer un boid tourné (triangle dirigé) === | ||
+ | [[File:boid.png|upright=0.5|thumb|right|top|Triangle tracé en utilisant love.graphics.polygon]] | ||
+ | <source lang="lua"> | ||
+ | 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) | ||
+ | </source> | ||
+ | |||
+ | === [https://fr.wikipedia.org/wiki/Hexadécagone Hexadécagone] Pixel-perfect === | ||
+ | [[File:hexadecagon.png|upright=0.5|thumb|right|top|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). | ||
+ | <source lang="lua"> | ||
+ | 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 | ||
</source> | </source> | ||
Latest revision as of 22:21, 5 January 2023
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.
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
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é)
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
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
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