Difference between revisions of "love.graphics.polygon"

(Rectangle with angle)
(Rectangle with angle)
Line 56: Line 56:
  
 
=== Rectangle with angle ===
 
=== Rectangle with angle ===
There is no easy way to draw [[love.graphics.rectangle|the tilted rectangle]], but it can be doe with polygon:
+
There is no easy way to draw [[love.graphics.rectangle|the tilted rectangle]], but it can be done with polygon:
  
 
<source lang="lua">
 
<source lang="lua">

Revision as of 15:27, 30 June 2021

Available since LÖVE 0.4.0
This function is not supported in earlier versions.

Draw a polygon.

Following the mode argument, this function can accept multiple numeric arguments or a single table of numeric arguments. In either case the arguments are interpreted as alternating x and y coordinates of the polygon's vertices.

O.png When in fill mode, the polygon must be convex and simple or rendering artifacts may occur. love.math.triangulate and love.math.isConvex can be used in 0.9.0+.  


Function

Synopsis

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

Arguments

DrawMode mode
How to draw the polygon.
number ...
The vertices of the polygon.

Returns

Nothing.

Function

Synopsis

love.graphics.polygon( mode, vertices )

Arguments

DrawMode mode
How to draw the polygon.
table vertices
The vertices of the polygon as a table.

Returns

Nothing.

Examples

Two ways of drawing the same triangle

Triangle drawn using love.graphics.polygon

This example shows how to give the coordinates explicitly and how to pass a table argument.

-- giving the coordinates directly
love.graphics.polygon('fill', 100, 100, 200, 100, 150, 200)

-- defining a table with the coordinates
-- this table could be built incrementally too
local vertices = {100, 100, 200, 100, 150, 200}

-- passing the table to the function as a second argument
love.graphics.polygon('fill', vertices)


Concave polygon

local vertices = {100,100,200,100,200,200,300,200,300,300,100,300} -- concave
local triangles = love.math.triangulate(vertices)
for i, triangle in pairs (triangles) do
	love.graphics.polygon( 'fill', triangle)
end
love.graphics.setColor(1, 1, 0, 1)
love.graphics.polygon('line', vertices)


Rectangle with angle

There is no easy way to draw the tilted rectangle, but it can be done with polygon:

function draw_tilted_rectangle ( mode, x, y, width, height, angle )
	angle = angle or 0 -- angle in radians
	local cosa, sina = math.cos(angle), math.sin(angle)
	local dx1, dy1 = width*cosa, width*sina
	local dx2, dy2 = -height*sina, height*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

See Also


Other Languages