In my initial thoughts I think I've already kind of knew a possible answer, but
knowing how to implemented was beeing a challenge.
While searching I stumbled in this forum, with a thread that had a similar
issue.
After reading it I tried to adapt to what I had. This was the result and it's
working:
Code:
//Define generic axis
osg::Vec3d x = osg::Vec3d(1,0,0);
osg::Vec3d y = osg::Vec3d(0,1,0);
osg::Vec3d z = osg::Vec3d(0,0,1);
For what I understand you must get the original matrix for the position of the
skeleton and then calculate the rotation of the bone using Quaternions, and
then applying this rotation to the original position matrix:
Code:
//b1 is a bone //luva is the glove where you get the rotation values
osg::Matrix m1;
osg::Matrixd r1=osg::Matrixd(osg::Quat(0,x, luva.finger0[0], y, 0, z));
m1 = r1 * b1->getMatrix();
b1->setMatrix(m1);
And then, make the update:
Code:
osgAnimation::Bone* parent1 = b1->getBoneParent();
if (parent1)
b1->setMatrixInSkeletonSpace(b1->getMatrix() *
parent1->getMatrixInSkeletonSpace());
else
b1->setMatrixInSkeletonSpace(b1->getMatrix());
Now I have to refine the rotations :)
Hope it can be of any help to someone.
Cheers,
Leonel[/code]
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=41996#41996
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org