TalysShade

10-05-2012, 02:08 AM

Hello everyone,

I've just begun learning openGL and one of the first steps is to draw a circle using the bresenham/midpoint algorithm. The code actual works (so proud of myself! ... ) but, completely as expected there's only dots. What I would like is to actually complete the circle as in connect the dots. However, also as expected, turning glBegin(GL_POINTS) into glBegin(GL_LINE_STRIP) (or LINES for that matter) connects the wrong dots because of the algorithm. Google hasn't helped me yet and so completely against my normal customs I decided to post here.

How can I have the dots connect to get a full circle, instead of just a dotted one?

Below the code used for the algorithm. I simply call it with awCircle(0,0,10);

/************************************************** **************************

* Draw the actual circle points in each section.

************************************************** *************************/

void drawCirclePoints (int x, int y, int xc, int yc)

{

glBegin(GL_POINTS);

glVertex2i (xc+x,yc+y);

glVertex2i (xc-x,yc+y);

glVertex2i (xc+x,yc-y);

glVertex2i (xc-x,yc-y);

glVertex2i (xc+y,yc+x);

glVertex2i (xc-y,yc+x);

glVertex2i (xc+y,yc-x);

glVertex2i (xc-y,yc-x);

glEnd();

}

/************************************************** **************************

* Function to make sure all points of a whole circle get drawn

************************************************** *************************/

void awCircle (int xc, int yc, int rad)

{

int x,y,d;

x = 0;

y = rad;

drawCirclePoints (x,y,xc,yc);

d = 1 - rad;

while (x < y)

{

if (d < 0)

{x++;d += 2*x +1;}

else

{ x++; y--;d += 2*(x-y) + 1;}

drawCirclePoints (x,y,xc,yc);

}

}

I've just begun learning openGL and one of the first steps is to draw a circle using the bresenham/midpoint algorithm. The code actual works (so proud of myself! ... ) but, completely as expected there's only dots. What I would like is to actually complete the circle as in connect the dots. However, also as expected, turning glBegin(GL_POINTS) into glBegin(GL_LINE_STRIP) (or LINES for that matter) connects the wrong dots because of the algorithm. Google hasn't helped me yet and so completely against my normal customs I decided to post here.

How can I have the dots connect to get a full circle, instead of just a dotted one?

Below the code used for the algorithm. I simply call it with awCircle(0,0,10);

/************************************************** **************************

* Draw the actual circle points in each section.

************************************************** *************************/

void drawCirclePoints (int x, int y, int xc, int yc)

{

glBegin(GL_POINTS);

glVertex2i (xc+x,yc+y);

glVertex2i (xc-x,yc+y);

glVertex2i (xc+x,yc-y);

glVertex2i (xc-x,yc-y);

glVertex2i (xc+y,yc+x);

glVertex2i (xc-y,yc+x);

glVertex2i (xc+y,yc-x);

glVertex2i (xc-y,yc-x);

glEnd();

}

/************************************************** **************************

* Function to make sure all points of a whole circle get drawn

************************************************** *************************/

void awCircle (int xc, int yc, int rad)

{

int x,y,d;

x = 0;

y = rad;

drawCirclePoints (x,y,xc,yc);

d = 1 - rad;

while (x < y)

{

if (d < 0)

{x++;d += 2*x +1;}

else

{ x++; y--;d += 2*(x-y) + 1;}

drawCirclePoints (x,y,xc,yc);

}

}