This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
O Defold é, no seu núcleo, uma engine 3D. Mesmo quando você trabalha apenas com material 2D, toda renderização é feita em 3D, mas projetada ortograficamente na tela. O Defold permite usar conteúdo 3D completo adicionando e criando malhas 3D em tempo de execução nas suas coleções. Você pode criar jogos estritamente 3D com apenas assets 3D, ou misturar conteúdo 3D e 2D como quiser.
Componentes Mesh são criados como qualquer outro componente de objeto de jogo. Você pode fazer isso de duas formas:

Com a malha criada, você precisa especificar algumas propriedades:
Além das propriedades Id, Position e Rotation, existem as seguintes propriedades específicas do componente:
Com o componente mesh no lugar, você pode editar e manipular livremente o componente e/ou o objeto de jogo que o encapsula com as ferramentas normais do Scene Editor para mover, rotacionar e escalar a malha como desejar.
Você pode manipular malhas em tempo de execução usando buffers do Defold. Exemplo de criação de um cubo a partir de triangle strips:
-- cubo
local vertices = {
0, 0, 0,
0, 1, 0,
1, 0, 0,
1, 1, 0,
1, 1, 1,
0, 1, 0,
0, 1, 1,
0, 0, 1,
1, 1, 1,
1, 0, 1,
1, 0, 0,
0, 0, 1,
0, 0, 0,
0, 1, 0
}
-- cria um buffer com um stream de posição
local buf = buffer.create(#vertices / 3, {
{ name = hash("position"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 }
})
-- obtém o stream de posição e escreve os vértices
local positions = buffer.get_stream(buf, "position")
for i, value in ipairs(vertices) do
positions[i] = vertices[i]
end
-- define o buffer com os vértices na malha
local res = go.get("#mesh", "vertices")
resource.set_buffer(res, buf)
Consulte a postagem de anúncio no fórum para mais informações sobre como usar o componente Mesh, incluindo projetos de exemplo e trechos de código.
Componentes Mesh não são automaticamente descartados por culling devido à sua natureza dinâmica e ao fato de não ser possível saber com certeza como os dados posicionais são codificados. Para fazer culling de uma malha, a caixa delimitadora alinhada aos eixos da malha precisa ser definida como metadados no buffer usando 6 floats (AABB min/max):
buffer.set_metadata(buf, hash("AABB"), { 0, 0, 0, 1, 1, 1 }, buffer.VALUE_TYPE_FLOAT32)
O material padrão mesh tem as seguintes constantes, que podem ser alteradas usando go.set() ou go.animate() (consulte o manual de Material para mais detalhes). Exemplos:
go.set("#mesh", "tint", vmath.vector4(1,0,0,1))
go.animate("#mesh", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tintvector4). O vector4 é usado para representar o tint com x, y, z e w correspondendo ao tint vermelho, verde, azul e alfa.Se a configuração Vertex Space do material da malha estiver definida como Local Space, os dados serão fornecidos como estão para você no shader, e você terá que transformar vértices/normais como de costume na GPU.
Se a configuração Vertex Space do material da malha estiver definida como World Space, você precisa fornecer um stream padrão position e normal, ou pode selecioná-lo no menu suspenso ao editar a malha. Isso é necessário para que a engine possa transformar os dados para espaço de mundo para batching com outros objetos.