PDA

View Full Version : rotating circle?

moloza
03-18-2009, 12:40 PM
Hello there..

This is my first post, I'm studying OpenGL and working in my first project. I draw a circle using the formula: glVertex2f(cos(angle)*radius , sin(angle)*radius). I'm controlling the segment of the circle by using starting and ending number of the (2 * pi). The problem is that when I try to rotate the circle using glRotatef(), It is rotated not around its center but around something else I couldn't figure it out!

I hope the problem is cleared. Any idea?

Best wishes

MaxH
03-18-2009, 05:25 PM
Post your code if it isn't too long.

moloza
03-18-2009, 09:04 PM
It's something like:

void newCircle(float x, float y, float radius)
{
glBegin(GL_LINE_STRIP);
for ( float i = 0.0; i < 2*3.14159; i += 0.05){
}
glRotatef(10, 0, 0,1);
}

now, this function is called in myDisplay(void) many times changeing x and y. Another thing, I change the starting and the ending of of i in the for loop to ensure that the rotating has occured.

what I got is the whole circle rotating not around itself. I want it to around it center.

I found a way to do it but not using glRotatef()!

thanks

MaxH
03-19-2009, 10:00 AM
The center of your circle must be at the origin when the rotation is applied. Looking at your snippet of code, I see two ways to do this -

glPushMatrix();
glTranslatef ( x, y, 0); // Moves rotated circle to desired location.
glRotatef (10, 0,0,1);
glTranslatef (-x, -y, 0); // Centers circle at origin.
newCircle (x, y, r);
glPopMatrix();

OR (a cleaner solution) -

glPushMatrix();
glTranslatef (x, y, 0); // Move circle to desired location.
glRotatef (10, 0,0,1);
newCircle (0, 0, r); // Generate circle at origin.
glPopMatrix();