Views
love.graphics.newMesh (Português)
love.graphics.newMesh
Disponível desde o LÖVE 0.9.0 |
Esta função não é suportada em versões anteriores. |
Cria uma nova Malha.
Esta função pode ser lenta, se for chamada repetidamente, como dentro de love.update ou love.draw. Se você precisa usar um recurso específico com frequência, crie-o uma vez e guarde-o em algum lugar onde possa ser reutilizado! |
Função
Sinopse
malha = love.graphics.newMesh( vertices, textura, modo )
Argumentos
tabela vertices
- A tabela contendo tabelas de informação para cada vértice da seguinte forma:
number [1]
- A posição do vértice no eixo x.
number [2]
- A posição do vértice no eixo y.
number [3]
- A textura de coordenada u. Coordenadas de textura ficam normalmente na faixa de [0, 1], mas podem ser menos ou mais (veja ModoDeAcondicionar.)
number [4]
- A textura de coordenada v. Coordenadas de textura ficam normalmente na faixa de [0, 1] mas podem ser menos ou mais (veja ModoDeAcondicionar.)
number [5] (255)
- O componente de cor vermelha.
number [6] (255)
- O componente de cor verde.
number [7] (255)
- O componente de cor azul.
number [8] (255)
- O componente de cor alfa.
Textura textura (nil)
- A Imagem ou Pintura a ser usada ao desenhar a Malha. Pode ser nil para não usar textura nenhuma.
ModoDeDesenhoDeMalha modo ("fan")
- Como os vértices serão usados ao desenhar. O modo padrão "fan" (leque) é suficiente para polígonos convexos simples.
Retorna
Malha malha
- A nova malha.
Exemplos
Cria e desenha uma Malha idêntica a uma imagem desenhada normalmente, mas com cores diferentes em cada canto
function love.load()
imagem = love.graphics.newImage("pig.png")
local vertices = {
{
-- canto superior esquerdo (avermelhado)
0, 0, -- posição do vértice
0, 0, -- coordenada de textura na posição do vértice
255, 0, 0, -- cor do vértice
},
{
-- canto superior direito (esverdeado)
image:getWidth(), 0,
1, 0, -- coordenadas de textura estão entre 0 e 1
0, 255, 0
},
{
-- canto inferior direito (azulado)
image:getWidth(), image:getHeight(),
1, 1,
0, 0, 255
},
{
-- canto inferior esquerdo (amarelado)
0, image:getHeight(),
0, 1,
255, 255, 0
},
}
-- o ModoDeDesenho de Malha "fan" (leque) funciona bem com Malhas de 4 vértices.
malha = love.graphics.newMesh(vertices, imagem, "fan")
end
function love.draw()
love.graphics.draw(malha, 0, 0)
end
imagem = love.graphics.newImage("pig.png")
local vertices = {
{
-- canto superior esquerdo (avermelhado)
0, 0, -- posição do vértice
0, 0, -- coordenada de textura na posição do vértice
255, 0, 0, -- cor do vértice
},
{
-- canto superior direito (esverdeado)
image:getWidth(), 0,
1, 0, -- coordenadas de textura estão entre 0 e 1
0, 255, 0
},
{
-- canto inferior direito (azulado)
image:getWidth(), image:getHeight(),
1, 1,
0, 0, 255
},
{
-- canto inferior esquerdo (amarelado)
0, image:getHeight(),
0, 1,
255, 255, 0
},
}
-- o ModoDeDesenho de Malha "fan" (leque) funciona bem com Malhas de 4 vértices.
malha = love.graphics.newMesh(vertices, imagem, "fan")
end
function love.draw()
love.graphics.draw(malha, 0, 0)
end
Cria e desenha um círculo texturizado com o centro avermelhado.
function CriarCirculoTexturizado(imagem, segmentos)
segmentos = segmentos or 40
local vertices = {}
-- O primeiro vértice fica no centro, e tem um tom avermelhado. Vamos centralizar o círculo ao redor da origem (0, 0).
table.insert(vertices, {0, 0, 0.5, 0.5, 255, 0, 0})
-- Criar os vértices na borda do círculo.
for i=0, segmentos do
local angulo = (i / segmentos) * math.pi * 2
-- Círculo unitário.
local x = math.cos(angulo)
local y = math.sin(angulo)
-- Nossa posição está na faixa de [-1, 1], mas queremos que a coordenada de textura fique na faixa de [0, 1].
local u = (x + 1) * 0.5
local v = (y + 1) * 0.5
-- A cor padrão para cada vértice é branca.
table.insert(vertices, {x, y, u, v})
end
-- O modo de desenho "fan" (leque) é perfeito para o nosso círculo.
return love.graphics.newMesh(vertices, imagem, "fan")
end
function love.load()
imagem = love.graphics.newImage("pig.png")
malha = CriarCirculoTexturizado(imagem)
end
function love.draw()
local raio = 100
local mx, my = love.mouse.getPosition()
-- Criamos um círculo unitário, então podemos usar o parâmetro de escala diretamente como raio.
love.graphics.draw(malha, mx, my, 0, raio, raio)
end
segmentos = segmentos or 40
local vertices = {}
-- O primeiro vértice fica no centro, e tem um tom avermelhado. Vamos centralizar o círculo ao redor da origem (0, 0).
table.insert(vertices, {0, 0, 0.5, 0.5, 255, 0, 0})
-- Criar os vértices na borda do círculo.
for i=0, segmentos do
local angulo = (i / segmentos) * math.pi * 2
-- Círculo unitário.
local x = math.cos(angulo)
local y = math.sin(angulo)
-- Nossa posição está na faixa de [-1, 1], mas queremos que a coordenada de textura fique na faixa de [0, 1].
local u = (x + 1) * 0.5
local v = (y + 1) * 0.5
-- A cor padrão para cada vértice é branca.
table.insert(vertices, {x, y, u, v})
end
-- O modo de desenho "fan" (leque) é perfeito para o nosso círculo.
return love.graphics.newMesh(vertices, imagem, "fan")
end
function love.load()
imagem = love.graphics.newImage("pig.png")
malha = CriarCirculoTexturizado(imagem)
end
function love.draw()
local raio = 100
local mx, my = love.mouse.getPosition()
-- Criamos um círculo unitário, então podemos usar o parâmetro de escala diretamente como raio.
love.graphics.draw(malha, mx, my, 0, raio, raio)
end
Cria um círculo e o desenha com mais eficiência que love.graphics.circle.
function CriarCirculo(segmentos)
segmentos = segmentos or 40
local vertices = {}
-- O primeiro vértice fica na origem (0, 0) e será o centro do círculo.
table.insert(vertices, {0, 0})
-- Cria os vértices na borda do círculo.
for i=0, segmentos do
local angulo = (i / segmentos) * math.pi * 2
-- Círculo unitário.
local x = math.cos(angulo)
local y = math.sin(angulo)
table.insert(vertices, {x, y})
end
-- O modo de desenho "fan" (leque) é perfeito para o nosso círculo. Não vamos texturizá-lo, então deixamos esse argumento como nil.
return love.graphics.newMesh(vertices, nil, "fan")
end
function love.load()
malha = CriarCirculo()
end
function love.draw()
local raio = 100
local mx, my = love.mouse.getPosition()
-- Criamos um círculo unitário, então podemos usar o parâmetro de escala diretamente como raio.
love.graphics.draw(malha, mx, my, 0, raio, raio)
end
segmentos = segmentos or 40
local vertices = {}
-- O primeiro vértice fica na origem (0, 0) e será o centro do círculo.
table.insert(vertices, {0, 0})
-- Cria os vértices na borda do círculo.
for i=0, segmentos do
local angulo = (i / segmentos) * math.pi * 2
-- Círculo unitário.
local x = math.cos(angulo)
local y = math.sin(angulo)
table.insert(vertices, {x, y})
end
-- O modo de desenho "fan" (leque) é perfeito para o nosso círculo. Não vamos texturizá-lo, então deixamos esse argumento como nil.
return love.graphics.newMesh(vertices, nil, "fan")
end
function love.load()
malha = CriarCirculo()
end
function love.draw()
local raio = 100
local mx, my = love.mouse.getPosition()
-- Criamos um círculo unitário, então podemos usar o parâmetro de escala diretamente como raio.
love.graphics.draw(malha, mx, my, 0, raio, raio)
end
Veja Também
Outras Línguas
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