Quantcast
Channel: 3D Graphics - Programmers Heaven
Viewing all articles
Browse latest Browse all 67

3d rotation.

$
0
0
I need to rotate object around its geometric center (coordinates of which are known: cx,cy and cz). Also, I need to rotate it around axes, which are themselves rotated, since it's a freespace sim. I'm trying to use quaternions, but so far rotation only seems to work in simple cases (i.e. while axes are unrotated), so I need help. I'm using OpenGL and following code:

[code]
//New, rotated axises:
int asize = 1;

double ox_newx = asize*cos(yaw)*cos(roll);
double ox_newy = asize*cos(roll)*sin(yaw);
double ox_newz = -asize*sin(roll);

double oy_newx = -asize*sin(yaw)*cos(pitch);
double oy_newy = asize*cos(yaw)*cos(pitch);;
double oy_newz = asize*sin(pitch);

double oz_newx = -asize*cos(pitch)*sin(roll);
double oz_newy = -asize*sin(pitch);
double oz_newz = asize*cos(pitch)*cos(roll);

//Rotation:
struct QUAT q1 = make_quat(ox_newx,ox_newy,ox_newz,pitch);
struct QUAT q2 = make_quat(oy_newx,oy_newy,oy_newz,roll);
struct QUAT q3 = make_quat(oz_newx,oz_newy,oz_newz,yaw);

struct QUAT res_quat = mul_3_quat(q1,q2,q3);

GLdouble m[4][4];
quat_to_matrix(res_quat,m);
glMultMatrixd(*m);
glTranslatef(-cx, -cy, -cz);
//Rendering:
glCallList(node->user.d);
[/code]



Viewing all articles
Browse latest Browse all 67

Latest Images

Trending Articles



Latest Images