Sign in to follow this  

Scene graph rotation problems

This topic is 4543 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have a simple scene graph in which I have nodes that correspond to lights, geometries, transformations, and sounds. When I have a geometry node and I add it as a child to a transformation node (which simply contains a matrix which I pass to glMultMatrixf) and then apply a rotation to the transformation node around some axis the goemetry rotates around the global axis when I want it to rotate locally . How would I go about modifying how I'm rotating so that I can rotate the abject around its current position? Here is a piece of the input code which does the translation and rotation for a transformation node.
	switch(key) {
	case GLUT_KEY_LEFT:                 
         playerTrans- >matRotate(playerTrans->transMatrix, 0.0, 0.1, 0.0);		
         rOarTrans- >matRotate(rOarTrans->transMatrix, 1.0, 0.0, 0.0);
         
		break;

	case GLUT_KEY_RIGHT: 
	 playerTrans- >matRotate(playerTrans->transMatrix, 0.0, -0.1, 0.0);
         lOarTrans- >matRotate(lOarTrans->transMatrix, 1.0, 0.0, 0.0);

		break;
		
		
	case GLUT_KEY_UP: 
         playerTrans- >Translate(playerTrans->transMatrix, 0.0, 0.0, incr+0.1);

		break;

	case GLUT_KEY_DOWN: 
						
         playerTrans- >Translate(playerTrans->transMatrix, 0.0, 0.0, incr-0.1);

		break;	

    default: break;
    }



Share this post


Link to post
Share on other sites
Jon,

Saw your rather old post with no replies and thought I would try to help in case you haven't fixed the problem yet. You need to have a distinct rotation matrix for each of the local objects to be transformed. Local object verts should be defined relative to the origin, and moved into world space after applying the rotation. Then, apply the global transformations to put objects into camera space.

Share this post


Link to post
Share on other sites
Your transform class can keep 3 different matrices: a translation matrix (T), a rotation matrix (R) and a scaling matrix (S). During the render phase, just multiply the matrices in order T*R*S, glMultMatrix on the result and you'll get the desired effect.

Tom

Share this post


Link to post
Share on other sites

This topic is 4543 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this