在Three.js中实现基于Posenet坐标的绑定3D模型骨骼动作同步问题
Hey there! Let’s break down why your rigged Blender model isn’t mirroring your arm movements via PoseNet, even though you’ve mapped the bones and aren’t seeing console errors. Here are targeted checks and fixes to try:
1. Fix Coordinate Space Mismatches
PoseNet outputs screen/world-space 2D/3D coordinates, but Blender rigs typically operate in local bone space or parent bone space. If you’re skipping coordinate conversion:
- Convert PoseNet’s relative joint positions (e.g., shoulder to elbow) into the bone’s local rotation values instead of assigning raw world coordinates.
- For example: Calculate the angle between PoseNet’s shoulder and elbow points, then map that angle to the corresponding bone’s
rotation_eulerorrotation_quaternionproperty (not its location).
2. Verify You’re Driving the Correct Bone Property
Most character rigs use rotation (not position) to drive limb movements. Double-check:
- Are you modifying the bone’s rotation attributes (like
bone.rotation_eulerorbone.rotation_quaternion) instead of itslocation? - Test this manually: Add a line like
arm_bone.rotation_euler.x = 1.5(adjust the value to your model’s scale) and see if the model’s arm moves. If not, you’re likely targeting the wrong property.
3. Validate Rig Binding & Skin Weights
Even if you can access bones, a broken rig export can prevent mesh deformation:
- Manually tweak a bone’s rotation in your code. If the model’s mesh doesn’t follow, your Blender export is missing critical data.
- Go back to Blender and confirm you’ve enabled Export Armature and Export Skin Weights (depending on your export format, e.g., GLB/GLTF, FBX). Also, ensure the model’s mesh is properly weighted to the bones.
4. Check PoseNet Data Flow
Make sure your PoseNet data is updating correctly:
- Print PoseNet’s joint coordinates to the console as you move your arm. If the values don’t change, your PoseNet input isn’t being captured properly.
- Normalize/scale PoseNet’s output: PoseNet often returns 0-1 relative coordinates, which need to be converted to rotation radians or scaled to match your model’s size. Tiny, unnoticeable values will look like no movement at all.
5. Account for Bone Hierarchies & Constraints
Blender rigs often use parent-child relationships or IK constraints:
- If your arm rig uses IK, you need to drive the IK controller’s position instead of directly modifying the elbow/wrist bones.
- Inspect your exported bone hierarchy to identify control bones (e.g., IK handles) vs. deform bones. Ensure you’re targeting the correct nodes for movement.
内容的提问来源于stack exchange,提问作者Syedah Nawal Munif

