draw xyz axes

Does anyone know how to draw xyz axes? I search the forum, but couldn’t get any related message.
What I need is to draw an axis in the lower left corner, show the rotation, and no response to zoom or panning.

An example is great helpfull.

Thanks for help.

Xueming

okay… well first i’ll assume your window has the dimensions 8x6 (in terms of ogl distances, not pixels… in other words, if your orgin is in the center of the screen you should be able to see from -4 to 4 across the x dimension and -3 to 3 across the y). i’ll also assume you have the variables rotX, rotY, and rotZ, which control the angles of rotation. lastly, i’ll assume you’re using glut…

in your display function, at the end, add this code:

// save previous matrix
glPushMatrix();
// clear matrix
glLoadIdentity();
// apply rotations
glRotate3f(rotX, 1.0, 0.0, 0.0);
glRotate3f(rotY, 0.0, 1.0, 0.0);
glRotate3f(rotZ, 0.0, 0.0, 1.0);
// move the axes to the screen corner
glTranslatef(-3.0, -2.0, 0.0);
// draw our axes
glBegin(GL_LINES);
// draw line for x axis
glColor3f(1.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
// draw line for y axis
glColor3f(0.0, 1.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
// draw line for Z axis
glColor3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glEnd();
// load the previous matrix
glPopMatrix();

that’s it. i didnt test this code so lemme know if there are any problems. hope it helps.

  • Jon Nadal

[This message has been edited by moox (edited 03-06-2001).]

Thanks for your help.

From the assumption of your code, I need to keep track the dimension, what if the model has been panned or zoomed?

I was thinking it would be easy if opengl can accept the pixel units, but I don’t know how?

Thanks again.

Xueming

Originally posted by moox:
[b]okay… well first i’ll assume your window has the dimensions 8x6 (in terms of ogl distances, not pixels… in other words, if your orgin is in the center of the screen you should be able to see from -4 to 4 across the x dimension and -3 to 3 across the y). i’ll also assume you have the variables rotX, rotY, and rotZ, which control the angles of rotation. lastly, i’ll assume you’re using glut…

in your display function, at the end, add this code:

// save previous matrix
glPushMatrix();
// clear matrix
glLoadIdentity();
// apply rotations
glRotate3f(rotX, 1.0, 0.0, 0.0);
glRotate3f(rotY, 0.0, 1.0, 0.0);
glRotate3f(rotZ, 0.0, 0.0, 1.0);
// move the axes to the screen corner
glTranslatef(-3.0, -2.0, 0.0);
// draw our axes
glBegin(GL_LINES);
// draw line for x axis
glColor3f(1.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
// draw line for y axis
glColor3f(0.0, 1.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
// draw line for Z axis
glColor3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glEnd();
// load the previous matrix
glPopMatrix();

that’s it. i didnt test this code so lemme know if there are any problems. hope it helps.

  • Jon Nadal

[This message has been edited by moox (edited 03-06-2001).][/b]

(OK… I posted this without reading the whole question first… this, of course,draws axes at the origin of the world… but I’m sure you can figure out how to draw them in the lower left corner easily enough )

Here’s what I do:

/* Axes display list */
static GLuint axes_list;

/* In some initialisation function… */

/* Create a display list for drawing axes */
axes_list = glGenLists(1);
glNewList(axes_list, GL_COMPILE);

glColor4ub(0, 0, 255, 255);
glBegin(GL_LINE_STRIP);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.75f, 0.25f, 0.0f);
glVertex3f(0.75f, -0.25f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.75f, 0.0f, 0.25f);
glVertex3f(0.75f, 0.0f, -0.25f);
glVertex3f(1.0f, 0.0f, 0.0f);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 0.75f, 0.25f);
glVertex3f(0.0f, 0.75f, -0.25f);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.25f, 0.75f, 0.0f);
glVertex3f(-0.25f, 0.75f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
glBegin(GL_LINE_STRIP);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 1.0f);
glVertex3f(0.25f, 0.0f, 0.75f);
glVertex3f(-0.25f, 0.0f, 0.75f);
glVertex3f(0.0f, 0.0f, 1.0f);
glVertex3f(0.0f, 0.25f, 0.75f);
glVertex3f(0.0f, -0.25f, 0.75f);
glVertex3f(0.0f, 0.0f, 1.0f);
glEnd();

glColor4ub(255, 255, 0, 255);
glRasterPos3f(1.1f, 0.0f, 0.0f);

glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, 'x');
glRasterPos3f(0.0f, 1.1f, 0.0f);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, 'y');
glRasterPos3f(0.0f, 0.0f, 1.1f);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, 'z');

glEndList();

/* In my display function */

/* Draw axes */
glPushMatrix();
glCallList(axes_list);
glPopMatrix();

Hope this helps

[This message has been edited by rts (edited 03-08-2001).]