Skinning des sommets
Introduction
Qt Quick La 3D prend en charge le skinning des sommets pour l'animation squelettique des géométries de maillage.
Consultez l’exemple de skinning simple pour une démonstration pratique de l’animation squelettique.
Dans la plupart des cas, les développeurs d’applications n’utiliseront pas manuellement l’API de skinning. Le workflow habituel consiste à utiliser un outil de création de contenu externe pour définir le squelette et la peau (ce que l’on appelle parfois le « rigging »), puis à utiliser l’outil d’importation de ressources Balsam pour convertir la ressource au format natif d’ Qt Quick 3D.
Définition d’un squelette
La base de l’animation squelettique est le squelette ( Skeleton). Il s’agit d’une représentation abstraite des mouvements possibles du modèle, inspirée du fonctionnement du squelette physique des vertébrés. Les « os » du squelette sont représentés par une hiérarchie de nœuds d’ Joint. Bien entendu, ceux-ci ne doivent pas nécessairement correspondre à de véritables os.
Skeleton {
id: qmlskeleton
Joint {
id: joint0
index: 0
skeletonRoot: qmlskeleton
Joint {
id: joint1
index: 1
skeletonRoot: qmlskeleton
}
Joint {
id: joint2
index: 2
skeletonRoot: qmlskeleton
}
}
}Associer un squelette à un modèle
Pour appliquer un squelette à un modèle, configurez la propriété « skeleton » du modèle :
Model {
skeleton: qmlskeleton
...Pour que le squelette ait un effet, l’ geometry du modèle doit inclure des informations de skinning. Pour cela, il faut inclure des vertex attributes avec les JointSemantic et WeightSemantic dans le tampon de sommets.
L’attribut ` JointSemantic ` détermine quelles articulations du squelette peuvent influencer un sommet donné. Il utilise pour cela les valeurs d’index spécifiées par ` Joint.index`. Comme cet attribut contient 4 index, un sommet peut être influencé par un maximum de 4 articulations.
L’attribut « WeightSemantic » décrit l’ intensité de l’influence de ces articulations. Il contient quatre valeurs à virgule flottante, chacune déterminant le poids attribué à l’articulation dont l’index correspond à la position correspondante dans l’attribut « JointSemantic ».
Par exemple, pour le squelette ci-dessus, si un sommet possède les attributs suivants :
JointSemantic attribut | WeightSemantic attribut |
|---|---|
QVector4D(2, 0, 0, 0) | QVector4D(1.0, 0.0, 0.0, 0.0) |
ce sommet sera influencé à 100 % par la jointure 2, et il se déplacera exactement autant que cette jointure. Les trois derniers indices de l’attribut « JointSemantic » sont ignorés, car les poids correspondants sont « 0.0 ».
Autre exemple, avec ces attributs :
JointSemantic attribut | WeightSemantic attribut |
|---|---|
QVector4D(1, 2, 0, 0) | QVector4D(0.5, 0.25, 0.0, 0.0) |
le sommet sera déplacé de 50 % du mouvement de l’articulation 1 plus 25 % du mouvement de l’articulation 2.
De plus, le squelette étant une représentation abstraite, le modèle doit spécifier les informations géométriques des articulations. Pour des raisons de performances, cela ne se fait pas en spécifiant directement ces informations. À la place, l’attribut « Model.inverseBindPoses » contient l’inverse de la matrice de transformation nécessaire pour ramener chaque articulation à sa position initiale.
Animation du squelette
La transformation d’une articulation d’un squelette entraîne le déplacement de tous les sommets reliés à cette articulation. Étant donné que la classe `Joint` hérite de ` Node`, un squelette peut être animé simplement à l’aide de la classe standard ` QML animations`.
NumberAnimation {
target: joint1
property: "eulerRotation.z"
duration: 5000
from: -90
to: 90
running: true
}Bien qu’il soit possible de créer des animations complexes en imbriquant des ` SequentialAnimation`, des ` ParallelAnimation ` et des ` NumberAnimation`, il est généralement plus pratique d’utiliser des animations sur la timeline pour animer des modèles skinnés.
© 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.