# Thread: I want to make a circle

1. ## I want to make a circle

i need to aproximate a circle with Ogl. and i need to draw it in any place of the screen without using the translatef command.

2. ## Re: I want to make a circle

Well, you could use a for loop to generate your coordinates with sin and cos... Then you can simply provide the way you want to draw with glBegin( GL_LINE_STRIP ); or somtehing...

So it could be like this:

glBegin( GL_LINE_STRIP );

for( float angle = 0.0f; angle <= (2.0f*PI); angle += 0.1f )
{
x = cos(angle);
y = sin(angle);

glVertex3f( x, y , -1 ); // I dont know you coordinate system, so this -1 maybe wrong.
}

glEnd();

This should give and idea... For a better approximation, you simply increment the angle by a smaller unit...
I have not tested this 'cause i just worte it.
I hope this helps.

3. ## Re: I want to make a circle

Originally posted by mancha:
for( float angle = 0.0f; angle <= (2.0f*PI); angle += 0.1f )
It's better to use something like:

angle+=2.f*PI/Segments

This way all circle segments will be equal.

4. ## Re: I want to make a circle

Also you need to have an offset varible, if you want to draw anywhere without glTranslate. I think you maybe having a problem a lot of people have using glTranslate and not also using glPop/push matrix with it, making things not translate the way you want.

Here are a few things missing from mancha's example:

ox, oy, oz = location of center of circle anywhere on screen.
r = radius of circle.

x = r * cos(angle);
y = r * sin(angle);

glVertex3f( ox - x, oy - y , oz ); // you may need to change ether ox or oy to plus instead of minus.

Originally posted by mancha:
Well, you could use a for loop to generate your coordinates with sin and cos... Then you can simply provide the way you want to draw with glBegin( GL_LINE_STRIP ); or somtehing...

So it could be like this:

glBegin( GL_LINE_STRIP );

for( float angle = 0.0f; angle <= (2.0f*PI); angle += 0.1f )
{
x = cos(angle);
y = sin(angle);

glVertex3f( x, y , -1 ); // I dont know you coordinate system, so this -1 maybe wrong.
}

glEnd();

This should give and idea... For a better approximation, you simply increment the angle by a smaller unit...
I have not tested this 'cause i just worte it.
I hope this helps.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•