JohnBrookes, you helped me quite a lot with your hint.
It really seems to be the case that the mesh needs a running animator first.
Here’s what I figured out:
// create a pose from the current skeleton position
var rootPose:SkeletonPose = new SkeletonPose();
for each(var joint:SkeletonJoint in _skeleton.joints){
var m:Matrix3D = new Matrix3D(joint.inverseBindPose);
m.invert();
var p:JointPose = new JointPose();
p.translation = m.transformVector(p.translation);
p.orientation.fromMatrix(m);
rootPose.jointPoses.push(p);
}
// create idle animation clip by adding the root pose twice
var clip:SkeletonClipNode = new SkeletonClipNode();
clip.addFrame(rootPose, 1000);
clip.addFrame(rootPose, 1000);
clip.name = "idle";
// build animation set
var animSet:SkeletonAnimationSet = new SkeletonAnimationSet(3);
animSet.addAnimation(clip);
// setup animator with set and skeleton
var animator:SkeletonAnimator = new SkeletonAnimator(animSet, _skeleton);
_mesh.animator = animator;
animator.play("idle");
It seems like an awful lot of overhead, but now I can influence the skeleton joint inverseBindPose directly and it updates the bone position.
Now I just need to figure out how to correctly place the bone to desired world-coordinates.
If anybody has a more elegant (shorter) solution to this, please post it here. The +100 reputation bounty on stackoverflow are still up for grabs.