Difference between revisions of "Mesh:setVertexMap"

m (Fixed example)
m (Added GeometryDrawMode link to the see also section)
Line 59: Line 59:
 
* [[parent::Geometry]]
 
* [[parent::Geometry]]
 
* [[Geometry:getVertexMap]]
 
* [[Geometry:getVertexMap]]
 +
* [[GeometryDrawMode]]
 
[[Category:Functions]]
 
[[Category:Functions]]
 
{{#set:Description=Sets the vertex map for a Geometry.}}
 
{{#set:Description=Sets the vertex map for a Geometry.}}
 
== Other Languages ==
 
== Other Languages ==
 
{{i18n|Geometry:setVertexMap}}
 
{{i18n|Geometry:setVertexMap}}

Revision as of 23:24, 16 August 2013

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

Sets the vertex map for a Geometry. The vertex map describes the order in which the vertices are used when the Geometry is drawn.

The vertex map allows you to re-order or reuse vertices when drawing without changing the actual vertex parameters or duplicating vertices. It is especially useful when combined with different Geometry Draw Modes.

Function

Synopsis

Geometry:setVertexMap( vertex_map )

Arguments

table vertex_map
A table containing a list of vertex indices to use when drawing. Values must be in the range of [1, Geometry:getVertexCount()].

Returns

Nothing.

Function

Synopsis

Geometry:setVertexMap( vi1, vi2, vi3, ... )

Arguments

number vi1
The index of the first vertex to use when drawing. Must be in the range of [1, Geometry:getVertexCount()].
number vi2
The index of the second vertex to use when drawing.
number vi3
The index of the third vertex to use when drawing.

Returns

Nothing.

Examples

Use a vertex map to fix a visual glitch without copy/pasting vertices.

function love.load()
    image = love.graphics.newImage("pig.png")
    local w,h = image:getWidth(), image:getHeight()

    -- We want to make a Geometry with 1 vertex in the middle of the image, and 4 at the corners.
    local vertices = {
        {w/2, h/2, 0.5,0.5, 255, 0,   0}, -- Center vertex has a red tint, the rest are white.
        {0,   0,   0,  0,   255, 255, 255},
        {w,   0,   1,  0,   255, 255, 255},
        {w,   h,   1,  1,   255, 255, 255},
        {0,   h    0,  1,   255, 255, 255},
    }

    -- But there's a problem! The drawn geometry will have a big triangle missing on its left side.
    -- This is because, in the default draw mode ("fan"), the vertices don't "loop": the top left vertex (#2) is unconnected to the bottom left one (#5).
    geometry = love.graphics.newGeometry(vertices)

    -- We could copy/paste the second vertex onto the end of the table of vertices.
    -- But instead we can just change the vertex map!
    geometry:setVertexMap(1, 2, 3, 4, 5, 2)
end

function love.draw()
    love.graphics.draw(image, geometry, 0, 0)
end

See Also

Other Languages