Qt Quick 3D - Simple Skinning Example
import QtQuick
import QtQuick3D
import Example
import QtQuick.Timeline
Node {
PrincipledMaterial {
id: material
lighting: PrincipledMaterial.NoLighting
baseColor: "red"
}
Node {
id: joint0
Node {
id: joint1
eulerRotation.z: 45
}
}
Model {
geometry: SkinGeometry {
id: geometry
positions: [
Qt.vector3d(0.0, 0.0, 0.0),
Qt.vector3d(1.0, 0.0, 0.0),
Qt.vector3d(0.0, 0.5, 0.0),
Qt.vector3d(1.0, 0.5, 0.0),
Qt.vector3d(0.0, 1.0, 0.0),
Qt.vector3d(1.0, 1.0, 0.0),
Qt.vector3d(0.0, 1.5, 0.0),
Qt.vector3d(1.0, 1.5, 0.0),
Qt.vector3d(0.0, 2.0, 0.0),
Qt.vector3d(1.0, 2.0, 0.0)
]
joints: [
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0
]
weights: [
1.00, 0.00, 0.0, 0.0,
1.00, 0.00, 0.0, 0.0,
0.75, 0.25, 0.0, 0.0,
0.75, 0.25, 0.0, 0.0,
0.50, 0.50, 0.0, 0.0,
0.50, 0.50, 0.0, 0.0,
0.25, 0.75, 0.0, 0.0,
0.25, 0.75, 0.0, 0.0,
0.00, 1.00, 0.0, 0.0,
0.00, 1.00, 0.0, 0.0
]
indexes: [
0, 1, 3,
0, 3, 2,
2, 3, 5,
2, 5, 4,
4, 5, 7,
4, 7, 6,
6, 7, 9,
6, 9, 8
]
}
materials: [
material
]
skin: Skin {
id: skin0
joints: [
joint0,
joint1
]
inverseBindPoses: [
Qt.matrix4x4(1, 0, 0, -0.5,
0, 1, 0, -1,
0, 0, 1, 0,
0, 0, 0, 1),
Qt.matrix4x4(1, 0, 0, -0.5,
0, 1, 0, -1,
0, 0, 1, 0,
0, 0, 0, 1)
]
}
}
Timeline {
id: timeline0
startFrame: 0
endFrame: 1000
currentFrame: 0
enabled: true
animations: [
TimelineAnimation {
duration: 5000
from: 0
to: 1000
running: true
}
]
KeyframeGroup {
target: joint1
property: "eulerRotation.z"
Keyframe {
frame: 0
value: 0
}
Keyframe {
frame: 250
value: 90
}
Keyframe {
frame: 750
value: -90
}
Keyframe {
frame: 1000
value: 0
}