Я реализовал алгоритм круга Брезенхэма. Но этот код выводит только белое окно. Не рисует ни одного пикселя границы круга.
Эта функция отображает 8 симметричных точек.
void plot_point(int x, int y, int xc, int yc)
{
glBegin(GL_POINTS);
glVertex2i(xc+x, yc+y);
glVertex2i(xc+x, yc-y);
glVertex2i(xc+y, yc+x);
glVertex2i(xc+y, yc-x);
glVertex2i(xc-x, yc-y);
glVertex2i(xc-y, yc-x);
glVertex2i(xc-x, yc+y);
glVertex2i(xc-y, yc+x);
glEnd();
}
Эта функция вычисляет координаты x, y.
void bresenham_circle(int r)
{
int x = 0, y = r, dx;
plot_point(x, y, 0, 0);
dx = 3 - 2*r;
x += 1;
if(dx >= 0)
y -= 1;
while(x < y)
{
plot_point(x, y, 0, 0);
if(dx < 0)
dx += 4*x + 6;
else
dx += 4*(x-y) + 10;
if(dx >= 0)
y -= 1;
x += 1;
}
glFlush();
}
Редактировать: Вот функции main () и display ():
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.5, 0.0);
int radius = 8;
bresenham_circle(radius);
}
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitWindowPosition(0, 0);
glutInitWindowSize(640,480);
glutCreateWindow("Bresenham's Circle");
glClearColor(1.0, 1.0, .5, 1.0);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Я пытался нарисовать какую-то одну точку, даже в пространстве [(-1, -1), (1, 1)] но все равно ничего не появляется.