love.graphics.newMesh
Available since LÖVE 0.9.0 |
This function is not supported in earlier versions. |
Creates a new Mesh.
![]() |
This function can be slow if it is called repeatedly, such as from love.update or love.draw. If you need to use a specific resource often, create it once and store it somewhere it can be reused! |
Function
Synopsis
mesh = love.graphics.newMesh( vertices, texture, mode )
Arguments
-
table vertices
- The table filled with vertex information tables for each vertex as follows:
number [1]
- The position of the vertex on the x-axis.
number [2]
- The position of the vertex on the y-axis.
number [3]
- The u texture coordinate. Texture coordinates are normally in the range of [0, 1], but can be greater or less (see WrapMode.)
number [4]
- The v texture coordinate. Texture coordinates are normally in the range of [0, 1], but can be greater or less (see WrapMode.)
number [5] (255)
- The red color component.
number [6] (255)
- The green color component.
number [7] (255)
- The blue color component.
number [8] (255)
- The alpha color component.
-
Texture texture (nil)
- The Image or Canvas to use when drawing the Mesh. May be nil to use no texture.
-
MeshDrawMode mode ("fan")
- How the vertices are used when drawing. The default mode "fan" is sufficient for simple convex polygons.
Returns
-
Mesh mesh
- The new mesh.
Function
Available since LÖVE 0.9.1 |
This variant is not supported in earlier versions. |
Synopsis
mesh = love.graphics.newMesh( vertexcount, texture, mode )
Arguments
-
number vertexcount
- The total number of vertices the Mesh will use. Each vertex is initialized to
{0,0, 0,0, 255,255,255,255}
. -
Texture texture (nil)
- The Image or Canvas to use when drawing the Mesh. May be nil to use no texture.
-
MeshDrawMode mode ("fan")
- How the vertices are used when drawing. The default mode "fan" is sufficient for simple convex polygons.
Returns
-
Mesh mesh
- The new mesh.
Notes
Mesh:setVertices or Mesh:setVertex and Mesh:setDrawRange can be used to specify vertex information once the Mesh is created.
Examples
Creates and draws a Mesh identical to a normal drawn image but with different colors at each corner
function love.load() image = love.graphics.newImage("pig.png") local vertices = { { -- top-left corner (red-tinted) 0, 0, -- position of the vertex 0, 0, -- texture coordinate at the vertex position 255, 0, 0, -- color of the vertex }, { -- top-right corner (green-tinted) image:getWidth(), 0, 1, 0, -- texture coordinates are in the range of [0, 1] 0, 255, 0 }, { -- bottom-right corner (blue-tinted) image:getWidth(), image:getHeight(), 1, 1, 0, 0, 255 }, { -- bottom-left corner (yellow-tinted) 0, image:getHeight(), 0, 1, 255, 255, 0 }, } -- the Mesh DrawMode "fan" works well for 4-vertex Meshes. mesh = love.graphics.newMesh(vertices, image, "fan") end function love.draw() love.graphics.draw(mesh, 0, 0) end
Creates and draws a textured circle with a red tint at the center.
function CreateTexturedCircle(image, segments) segments = segments or 40 local vertices = {} -- The first vertex is at the center, and has a red tint. We're centering the circle around the origin (0, 0). table.insert(vertices, {0, 0, 0.5, 0.5, 255, 0, 0}) -- Create the vertices at the edge of the circle. for i=0, segments do local angle = (i / segments) * math.pi * 2 -- Unit-circle. local x = math.cos(angle) local y = math.sin(angle) -- Our position is in the range of [-1, 1] but we want the texture coordinate to be in the range of [0, 1]. local u = (x + 1) * 0.5 local v = (y + 1) * 0.5 -- The per-vertex color defaults to white. table.insert(vertices, {x, y, u, v}) end -- The "fan" draw mode is perfect for our circle. return love.graphics.newMesh(vertices, image, "fan") end function love.load() image = love.graphics.newImage("pig.png") mesh = CreateTexturedCircle(image) end function love.draw() local radius = 100 local mx, my = love.mouse.getPosition() -- We created a unit-circle, so we can use the scale parameter for the radius directly. love.graphics.draw(mesh, mx, my, 0, radius, radius) end
Creates a circle and draws it more efficiently than love.graphics.circle.
function CreateCircle(segments) segments = segments or 40 local vertices = {} -- The first vertex is at the origin (0, 0) and will be the center of the circle. table.insert(vertices, {0, 0}) -- Create the vertices at the edge of the circle. for i=0, segments do local angle = (i / segments) * math.pi * 2 -- Unit-circle. local x = math.cos(angle) local y = math.sin(angle) table.insert(vertices, {x, y}) end -- The "fan" draw mode is perfect for our circle. We aren't texturing it, so we leave that argument as nil. return love.graphics.newMesh(vertices, nil, "fan") end function love.load() mesh = CreateCircle() end function love.draw() local radius = 100 local mx, my = love.mouse.getPosition() -- We created a unit-circle, so we can use the scale parameter for the radius directly. love.graphics.draw(mesh, mx, my, 0, radius, radius) end
See Also
Category: