Я хочу реализовать алгоритм заливки заливки ... так что, когда я получу x и y-код точки ... она должна начать заливку с этой точки и заполнять, пока не найдет границу, но это не так заполняя весь регион ... скажем, пятиугольник
это код, который я использую
void setpixel(struct fill fillcolor,int x,int y)
{
glColor3f(fillcolor.r,fillcolor.g,fillcolor.b);
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
glFlush();
}
struct fill getpixcol(int x,int y)
{
struct fill gotpixel;
glReadPixels(x,y,1,1,GL_RGB,GL_UNSIGNED_BYTE,pick_col);
gotpixel.r =(float) pick_col[0]/255.0;
gotpixel.g =(float) pick_col[1]/255.0;
gotpixel.b =(float) pick_col[2]/255.0;
return(gotpixel);
}
void floodFill(int x, int y,struct fill fillcolor,struct fill boundarycolor)
{
struct fill tmp;
// if ((x < 0) || (x >= 500)) return;
// if ((y < 0) || (y >= 500)) return;
tmp=getpixcol(x,y);
while (tmp.r!=boundarycolor.r && tmp.g!=boundarycolor.g && tmp.b!=boundarycolor.b)
{
setpixel(fillcolor,x,y);
setpixel(fillcolor,x+1,y);
setpixel(fillcolor,x,y+1);
setpixel(fillcolor,x,y-1);
setpixel(fillcolor,x-1,y);
floodFill(x-1,y+1,fillcolor,boundarycolor);
floodFill(x-1,y,fillcolor,boundarycolor);
floodFill(x-1,y-1,fillcolor,boundarycolor);
floodFill(x,y+1,fillcolor,boundarycolor);
floodFill(x,y-1,fillcolor,boundarycolor);
floodFill(x+1,y+1,fillcolor,boundarycolor);
floodFill(x+1,y,fillcolor,boundarycolor);
floodFill(x+1,y-1,fillcolor,boundarycolor);
}
}