Was ich bisher getan habe:
Strichmännchen-Animation: Ich habe für jedes Gelenk (z. B. Schulter, Ellenbogen, Handgelenk) kleine Kugeln erstellt und diese mit Zylindern verbunden, um ein „Strichmännchen“ zu bilden. Indem ich jede Kugel an einem Orientierungspunkt (x, y, z) positioniere und einen Zylinder zwischen den Kugeln zeichne, sehe ich eine grobe Figur, die sich korrekt bewegt und die Person im Video korrekt nachahmt.

Ein manipuliertes 3D-Modell geladen:< /em> Das habe ich importierte ein humanoides .gltf-Modell mit einem Skelett (Knochen für jeden Körperteil).
wie:
Code: Select all
model.traverse((child) => {
if (child.isBone) {
bonesMap[child.name] = child;
}
});
einzustellen
Code: Select all
function setBoneDirection(bone, parentPos, childPos) {
const direction = new THREE.Vector3()
.subVectors(childPos, parentPos)
.normalize();
// Then set the bone’s quaternion somehow...
}

Die Knochen bewegen sich zwar, aber die Richtung stimmt nicht und der Arm/Unterarm dreht sich unbeholfen. Der Ellenbogen beugt sich einigermaßen richtig, dreht sich aber in die falsche Richtung.
Meine Hauptfragen:
Lokal vs . Weltraum: Meine Orientierungspunkte liegen im Weltraum, aber die Transformation jedes Knochens in einem Skelett ist im lokalen Raum definiert (relativ zu seinem übergeordneten Element). Wenn ich also den Oberarm bewege, wird die Drehung des Unterarms beeinflusst. Wie konvertiere ich meine Pose-Daten richtig in den lokalen Raum jedes Bones, damit sich die Kette korrekt bewegt?
Anweisungen für Pose/Ruhepose binden: Die Bones des Rigs sind wahrscheinlich ar Sie sind nicht entlang
(0,1,0) (0,1,0) oder (0,−1,0) (0,−1,0) in ihrer neutralen (Bindungs-)Position ausgerichtet. Wie finde ich die Standardachse jedes Knochens heraus, damit ich den korrekten Rotationsversatz berechnen kann?
Robuster Ansatz/Bibliothek: Gibt es eine Bibliothek, einen Algorithmus oder einen Code? Muster, das:
- die Orientierungspunkte aus dem Weltraum → den lokalen Raum des übergeordneten Knochens transformiert
- die „Ruhehaltungsrichtung“ eines Knochens bestimmt ” durch Messung in der Bindeposition des Rigs
- Berechnet die endgültige Rotation für alle Knochen, sodass das Modell zu meiner Strichmännchen-Animation passt?
Quellcode: https://github.com/AzizStark/3DAvatar
Alle hilfreichen Vorschläge oder Codebeispiele zur genauen Anwendung von Frame-by-Frame-Landmark-Daten auf ein manipuliertes Modell in Three.js wäre super hilfreich. Danke!