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
Defold es, en esencia, un motor 3D. Incluso cuando trabajas solo con material 2D, todo el renderizado se realiza en 3D, pero se proyecta ortográficamente en la pantalla. Defold te permite usar contenido 3D completo al agregar y crear mallas 3D en tiempo de ejecución en tus colecciones. Puedes crear juegos estrictamente en 3D solo con assets 3D, o puedes mezclar contenido 3D y 2D como prefieras.
Los componentes Mesh se crean igual que cualquier otro componente de objeto de juego. Puedes hacerlo de dos formas:

Una vez creada la malla, debes especificar varias propiedades:
Aparte de las propiedades Id, Position y Rotation, existen las siguientes propiedades específicas del componente:
Con el componente Mesh en su lugar, puedes editar y manipular libremente el componente y/o el objeto de juego que lo encapsula con las herramientas habituales de Scene Editor para mover, rotar y escalar la malla a tu gusto.
Puedes manipular mallas en tiempo de ejecución usando buffers de Defold. Ejemplo de creación de un 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
}
-- crea un buffer con un stream position
local buf = buffer.create(#vertices / 3, {
{ name = hash("position"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 }
})
-- obtiene el stream position y escribe los vértices
local positions = buffer.get_stream(buf, "position")
for i, value in ipairs(vertices) do
positions[i] = vertices[i]
end
-- define el buffer con los vértices en la malla
local res = go.get("#mesh", "vertices")
resource.set_buffer(res, buf)
Consulta la publicación de anuncio en el foro para obtener más información sobre cómo usar el componente Mesh, incluidos proyectos de ejemplo y fragmentos de código.
Los componentes Mesh no se descartan automáticamente debido a su naturaleza dinámica y al hecho de que no es posible saber con certeza cómo están codificados los datos posicionales. Para descartar una malla, el cuadro delimitador alineado a los ejes de la malla debe establecerse como metadatos en el buffer usando 6 floats (AABB min/max):
buffer.set_metadata(buf, hash("AABB"), { 0, 0, 0, 1, 1, 1 }, buffer.VALUE_TYPE_FLOAT32)
El material predeterminado de mesh tiene las siguientes constantes que se pueden cambiar con go.set() o go.animate() (consulta el manual de Material para más detalles). Ejemplos:
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). El vector4 se usa para representar el tinte con x, y, z y w correspondientes al tinte rojo, verde, azul y alfa.Si la configuración Vertex Space del material de la malla está establecida en Local Space, los datos se te proporcionarán tal cual en tu shader y tendrás que transformar los vértices/normales como de costumbre en la GPU.
Si la configuración Vertex Space del material de la malla está establecida en World Space, debes proporcionar un stream predeterminado position y normal, o puedes seleccionarlo en el menú desplegable al editar la malla. Esto es para que el motor pueda transformar los datos al espacio del mundo para batching con otros objetos.