Я реализовал алгоритм круга Брезенхэма. Но этот код выводит только белое окно. Не рисует ни одного пикселя границы круга.
Эта функция отображает 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)], но все равно ничего не появляется.
plot_points
или виноват алгоритм круга? - person eike   schedule 05.11.2019[(-1.0, -1.0), (1.0, 1.0)]
, поэтому ваши точки могут просто находиться за пределами вашего пространства обзора. Попробуйте glVertex2i(0,0) и посмотрите, отображается ли точка в центре экрана. - person eike   schedule 05.11.2019