PDA

View Full Version : mouse rotation



07-05-2004, 03:36 AM
I draw a grid on the zx plain like in any 3d editing software (maya, 3dmax) and I am trying to have the same mouse rotation movement. What I mean is that when the user clicks with his mouse he can rotate the grid around like in Maya and 3dmax. Would anybody know how to do this, or maybe a tutorial on it? Thanks in advance.

ZbuffeR
07-05-2004, 10:44 AM
It is quite easy.
Lets say the world z axis aims at you, the x to the right, the y goes up. The tricky part is that you may want to rotate around z first, then around x. But the order of operations is counter intuitive.

Get the mouse movement delta in the x and y screen axis. accumelate on some global x and y varaibles :
xrot+=xmousedelta;
yrot+=xmousedelta;

now lets, start :
----
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotate( xrot,1,0,0);
glRotate( yrot,0,1,0);
<draw your grid and world>
----
You will want to clamp your xrot to an interval like [-90;90] or even more restrictive.

Some people prefer when the 2 rotations are exchanged (it is even the default mode for Blender) I really do not understand why. Anyway.

I hope it helps.

07-05-2004, 12:35 PM
what is the "mouse movement delta" and do i need to use some sort of equation to get it?

ce110ut
07-05-2004, 06:15 PM
Originally posted by <ugor>:
what is the "mouse movement delta" and do i need to use some sort of equation to get it?i think some api's have that info for you but just in case they don't, you can do something like this:


// just an example

struct mouseinfo
{
int, x, y, oldx, oldy;
};

// ...

void mouse_callback(int x, int y, mouseinfo &amp;mouse)
{
mouse.oldx = mouse.x;
mouse.oldy = mouse.y;
mouse.x = x;
mouse.y = y;
}

// ...

int deltax = mouse.x - mouse.oldx;
int deltay = mouse y - mouse.oldy;... something along those lines. hope that gets you in the right direction.

:regards: