Sign in to follow this  
samprass123

-= OGL translate & rotate around an axis =-

Recommended Posts

samprass123    122
Hi. I have a problem. I can't solve this: for example: translate an object to (1,2,0) then rotate around its horizontal center axis. what's the solution? please help me in this vc++ code: http://people.inf.elte.hu/suranyi/ogl/nehe/main_eltol.cpp THANKS

Share this post


Link to post
Share on other sites
superpig    1825
We won't do your homework for you.

However, I will tell you that all rotations happen around the point (0,0,0), so you'll need to perform the rotation before you perform the translation.

Share this post


Link to post
Share on other sites
haegarr    7372
Quote:
Original post by samprass123
but my problem is:
the axis is : (x,0,0)
and i want the axis to be : (x,0.5,0)

Why is this a problem? Could you explain, please?

Share this post


Link to post
Share on other sites
jpetrie    13159
Look up "arbitrary axis rotations" or a similar term in a decent linear algebra or geometry book (like this one).

Basically, what you'll want to do is construct a matrix C that transforms the object into a coordinate system where the desired axis of rotation is the Z axis of the coordinate system, applying a rotation of the desired amount around the Z axis (call this matrix R) and then undoing the coordinate transform.

Constructing C is a simple as computing an orthonormal basis using your rotation axis as the initial vector. R is just the canonical "rotation about the Z axis" matrix. The final transformation is:

v = C * R * inverse(C)

As others have said you must rotate before you translate.

Share this post


Link to post
Share on other sites
aviosity    194
Hey samprass,

If you understand matrix math, this is a trivial problem. If you're in a graphics class, understanding the operations of matrices and how they map into 3D space is crucial to understanding computer graphpics; trust me, I tried learning graphics without knowing the math, and it bit me in the behind.

Look up how to do a rotation around an arbitrary axis with a matrix, or create a rotation matrix. For the translation, look up a translation matrix. There are plenty of computer graphics resources on the web that will explain this sort of thing.

Hope that helps,
Aviosity

EDIT: Whoops, looks like jpetrie got there before I did, with a better explanation.

Share this post


Link to post
Share on other sites
taby    1265

void point_3::rotate_x(const float &radians)
{
float t_y = y;

y = t_y*cos(radians) + z*sin(radians);
z = t_y*-sin(radians) + z*cos(radians);
}

Share this post


Link to post
Share on other sites
samprass123    122
Thanx for help.

i've solved the problem.

but there is an other!

if i rotate the object with glRotatef(90,1,0,0) around axis x, with angle 90, and then rotate with glRotatef(90,0,1,0) around axis y, with angle 90, the object rotated not around the y, but the z axis!!!

i think, that the coord.system is rotated too, and it is the problem...

help me pls to solve this!

THANK

Share this post


Link to post
Share on other sites

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