# Thread: Getting positions and rotations for a limb?

1. ## Getting positions and rotations for a limb?

Pseudo code below:
Code :
```glPushMatrix();
glRotatef(100,1,0,0);;
glRotatef(50,0,1,0);
glRotatef(100,1,0,0);
glTranslatef(x0,y0,z0);
glCallList(dl0);

glPushMatrix();
glRotatef(50,1,0,0);;
glRotatef(50,0,1,0);
glRotatef(50,1,0,0);
glTranslatef(x1,y1,z1);
glCallList(dl1);

glPushMatrix();
glRotatef(50,1,0,0);;
glRotatef(100,0,1,0);
glRotatef(50,1,0,0);
glTranslatef(x2,y2,z2);
glCallList(dl2);```
Relative to 0, how would I determine the translation and rotation value for the last Display List in this series, if I were exporting it like a scene? If there were no rotations, I would just add all of the translations up, but when a rotation is performed, it is a different story. Is there a quick and simple way to get that translation value relative to the origin and the rotation value that I need to use so it is also rotated the same way as when called this way? Like if I were editing the vertex data of something to be rotated and placed just like in the OpenGL window after the pushes, rotations, and translations? Thank you!

2. Originally Posted by Flotonic
Pseudo code below:[CODE]...how would I determine the translation and rotation value for the last Display List in this series, if I were exporting it like a scene?
Do the transforms with the matrix stack, then query back the matrix. The translation is in the last column. The upper-left 3x3 are the rotation matrix (orthonormal basis vectors). Decompose into whatever form you want to represent the rotation transform in.

3. Thank you so much for your response, Dark Photon! It is now getting the correct translations, but rotations are another thing. I am getting the matrix with the following code:
Code :
`GLint matrix[16]; glGetIntegerv(GL_MODELVIEW_MATRIX,matrix);`
I have been searching for hours but have still yet to find a function that decomposes the matrix to X, Y, Z Euler angles. Do you happen to have any code from a project of yours that happens to do this that you can share, or is there a way to get the final rotation by doing some sort of calculations with the previous rotations? Thanks again!

4. GLint matrix[16]???

Think you mean GLfloat matrix[16] and glGetFloatv().

5. Thanks! It is now a little closer! Some of the rotations are correct while others are wrong. Do you think it may have something to do with axis ordering?
Code :
```GLfloat matrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX,matrix);
float xR, yR, zR;
EulerAnglesFromMatrix(&xR,&yR,&zR,matrix);
Function:
Code :
```void EulerAnglesFromMatrix(float *attitude, float *heading, float *bank, GLfloat *mat) {
if ( mat[6] > 0.998 || mat[6] < -0.998 ) {
*heading = atan2( -mat[8], mat[0] );
bank = 0;
} else {
*heading = atan2( mat[2], mat[10] );
*bank = atan2( mat[4], mat[5] );
}     *attitude = asin( mat[6] );
}```

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•