【NEWBIE】Question about osg::MatrixTransform::getMatrix().getTrans() and getRotate()

Jiechang Guo osgforum at tevs.eu
Fri May 5 04:54:51 PDT 2017

     I'm a newbie and not good at math. 
     I'm so confused with osg::MatrixTransform::getMatrix().getTrans() and getRotate().
     I use the code below to rotate an object around y axis about 45 degrees.

model1->setMatrix(origin*osg::Matrix::rotate(osg::DegreesToRadians(45.0), 0, 0, 1));

      I want to get the rotation of the model, so I used the function to get a quat:

osg::Quat rotation = model1->getMatrix().getRotate();

      I thought the rotation should be like (0.7853982,0,0,1)。but the result is(0,0,0.382683,0,92388).
      I've checked the source code of OSG, and I cann't get any inspriation from it.
      Another case, I thought I should move the object to its center and do rotate then move it back (according to some book or paper). The code is below.

osg::Vec3 Center = model1->getBound().center();
model1->setMatrix(origin*osg::Matrix::translate(-Center)*osg::Matrix::rotate(osg::DegreesToRadians(45.0), 0, 0, 1)*osg::Matrix::translate(Center));
The object is on the same position and rotation as the first case.
       I try to get the rotation, I get more confused..
       I thought I didn't change the position of the model, the tranlation I get 

osg::Vec3 translation = model1->getMatrix().getTrans();
should be (0,0,0) but (-168.184,-141.218, 0) and the rotation is just like the first case.
       Could you please help me to figure out why I got those results?

Thank you!


Read this topic online here:

More information about the osg-users mailing list