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 incluir assets 3D, o modelos, en tus colecciones. Puedes crear juegos estrictamente en 3D solo con assets 3D, o puedes mezclar contenido 3D y 2D como prefieras.
Los componentes Model se crean igual que cualquier otro componente de objeto de juego. Puedes hacerlo de dos formas:

Una vez creado el modelo, debes especificar varias propiedades:
Aparte de las propiedades Id, Position y Rotation, existen las siguientes propiedades específicas del componente:
Además de las propiedades anteriores, también habrá un campo para asignar un material por cada malla del modelo:
Según el material, habrá una o más propiedades de textura:
Con el componente Model 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 el modelo a tu gusto.
Puedes manipular modelos en runtime mediante varias funciones y propiedades diferentes (consulta la documentación de la API para su uso).

Defold proporciona soporte potente para controlar la animación en runtime. Más información en el manual de animación de modelos:
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
El cursor de reproducción de animación se puede animar a mano o mediante el sistema de animación de propiedades:
-- define la animación run
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- anima el cursor
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)
Los modelos también pueden usar animaciones de morph targets de glTF. Los pesos de los morph targets se animan con model.play_anim() igual que otras animaciones de modelos, y se pueden leer o sobrescribir en runtime con model.get_blend_weights() y model.set_blend_weights(). Consulta la sección de morph targets en el manual de animación de modelos para más detalles.
Un modelo también tiene varias propiedades diferentes que pueden manipularse con go.get() y go.set():
animationhash) (solo lectura). Cambias la animación usando model.play_anim() (ver arriba).cursornumber).materialhash). Puedes cambiarlo usando una propiedad de recurso de material y go.set(). Consulta la referencia de la API para ver un ejemplo.playback_ratenumber).textureNhash). Puedes cambiarlas usando una propiedad de recurso de textura y go.set(). Consulta la referencia de la API para ver un ejemplo.El software 3D suele permitirte definir propiedades en los vértices del objeto, como color y texturas. Esta información se guarda en el archivo glTF .gltf o .glb que exportas desde tu software 3D. Según los requisitos de tu juego, tendrás que seleccionar y/o crear materiales adecuados y eficientes para tus objetos. Un material combina programas de shader con un conjunto de parámetros para renderizar el objeto.
Hay varios materiales integrados que puedes usar como punto de partida:
Si necesitas crear materiales personalizados para tus modelos, consulta la documentación de Material para más información. El manual de Shader contiene información sobre cómo funcionan los programas de shader.
El material predeterminado de model 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("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "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.El script de render predeterminado está hecho a medida para juegos 2D y no funciona con modelos 3D. Pero puedes habilitar el renderizado de tus modelos copiando el script de render predeterminado y agregando unas pocas líneas de código al script de render. Por ejemplo:
function init(self)
self.model_pred = render.predicate({"model"})
...
end
function update()
...
render.set_depth_mask(true)
render.enable_state(graphics.STATE_DEPTH_TEST)
render.set_projection(stretch_projection(-1000, 1000)) -- ortográfica
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
Consulta la documentación de Render para más detalles sobre cómo funcionan los scripts de render.