我已经实现了Bresenham的Circle算法。但是此代码仅输出白色窗口。没有绘制圆形边界的单个像素。
此函数绘制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+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);
dx = 3 - 2*r;
x += 1;
if(dx >= 0)
y -= 1;
while(x < y)
{
plot_point(x,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)]空间中,我也尝试绘制一些单点,但是仍然没有出现。