I've run into a problem using Quaternion rotation with osg::Matrixd that I 
can't seem to figure out. Consider the following test example and resulting 
output:

#define DEG2RAD(d) d*(2*M_PI/360.0)
#define RAD2DEG(r) r*360.0/2*M_PI

void testQuaternionRotation()
{
        osg::Matrixd osgTrans;
        osgTrans.set(osg::Matrix::identity());
        osg::Vec3f axis(0.0,0.0,1.0);
        double osgTransAngle,osgQuatAngle;


        printf("\n*** Doing a 360 deg quaternion rotation about z-axis using 
OSG ***\n");
        for(int i = 0; i < 360; ++i)
        {
                double angle = DEG2RAD(i);
                osg::Quat quat(angle,axis);
                quat.getRotate(osgQuatAngle,axis);

                //Set the quat rotation on matrix
                osgTrans.setRotate(quat);
                quat = osgTrans.getRotate();
                quat.getRotate(osgTransAngle,axis);
                printf("Rot: %.1f osgQang: %.1f osgTransAng: 
%.1f\n",RAD2DEG(angle),RAD2DEG(osgQuatAngle),RAD2DEG(osgTransAngle));
        }
}

Output:
Rot: 268.0 osgQang: 268.0 osgTransAng: 268.0
Rot: 269.0 osgQang: 269.0 osgTransAng: 269.0
Rot: 270.0 osgQang: 270.0 osgTransAng: 90.0
Rot: 271.0 osgQang: 271.0 osgTransAng: 89.0

Reading back rotation angles in the 4'th quadrant gives me invalid values. I 
would have expected to either get negative angle or the angle that I used to 
rotate about the z-axis. Am I missing a elementary consept here or is this an 
actual bug in the implementation?
Setting the matrix using a quaternion with angles from the 4'th quaderant seems 
to be working just fine, it's only reading it back that doesn't work.

Thanks for any help on this,
Filip
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to