Qt Quick 3D - Ejemplo de Morphing
Demuestra cómo controlar animaciones de morphing en Qt Quick 3D.

Este ejemplo muestra cómo controlar la animación de morphing en un modelo que ha sido importado desde una herramienta externa.
Creación de una malla
La malla para el modelo fue creada usando la herramienta de modelado Blender 3D. Además de la forma base, la malla contiene tres objetivos morph (llamados shape keys en Blender).

Se exportó desde Blender como un archivo glTF y se importó con balsam.
Control de los objetivos morph
Normalmente, el morphing se controla mediante una animación de línea de tiempo o una animación de propiedad. En este ejemplo, utilizamos deslizadores en su lugar, para que sea posible experimentar libremente con la combinación de diferentes pesos:
Label { text: "Mouth:"; } RealSlider { id: mouthSlider from: 0.0 to: 1.0 } Label { text: "Ears and eyebrows:" } RealSlider { id: earSlider from: 0.0 to: 1.0 } Label { text: "Cubify:" } RealSlider { id: cubeSlider from: 0.0 to: 1.0 }
(RealSlider es un simple deslizador que proporciona un valor en coma flotante. Está tomado del ejemplo de efectos).
Definimos un MorphTarget para cada uno de los objetivos de la malla. Los objetivos morph son los objetos a los que nos vinculamos para controlar el morphing. Típicamente, serán animados, pero en este ejemplo los vinculamos a los valores del deslizador:
MorphTarget { id: morphtarget0 weight: mouthSlider.value attributes: MorphTarget.Position | MorphTarget.Normal } MorphTarget { id: morphtarget1 weight: earSlider.value attributes: MorphTarget.Position | MorphTarget.Normal } MorphTarget { id: morphtarget2 weight: cubeSlider.value attributes: MorphTarget.Position | MorphTarget.Normal }
Por último, creamos un modelo y vinculamos los objetivos morph a los objetivos de la malla:
Model { source: "suzanne.mesh" morphTargets: [ morphtarget0, morphtarget1, morphtarget2 ] materials: PrincipledMaterial { baseColor: "#41cd52" roughness: 0.1 } SequentialAnimation on eulerRotation.y { NumberAnimation { from: -45; to: 45; duration: 10000 } NumberAnimation { from: 45; to: -45; duration: 10000 } loops: Animation.Infinite } }
Ten en cuenta que los objetivos se relacionan por su posición en la lista: los nombres no son significativos.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.