Program:
#include<GL/glut.h> #include<iostream> using namespace std; void myInit() { gluOrtho2D(0,500,0,500); glClearColor(1,1,1,1); glMatrixMode(GL_PROJECTION); glColor3f(1,0,0); } void plotPixel(int x,int y,float* fill_color) { glColor3f(fill_color[0],fill_color[1],fill_color[2]); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); glFlush(); } void boundaryFill(int x,int y,float* fill_color,float* boundary_color) { float current[3]; glReadPixels(x,y,1.0,1.0,GL_RGB,GL_FLOAT,current); if((current[0] != boundary_color[0] || current[1] != boundary_color[1] ||current[2] != boundary_color[2] ) && (current[0] != fill_color[0] || current[1] != fill_color[1] ||current[2] != fill_color[2] )) { plotPixel(x,y,fill_color); boundaryFill(x+1,y,fill_color,boundary_color); boundaryFill(x,y+1,fill_color,boundary_color); boundaryFill(x-1,y,fill_color,boundary_color); boundaryFill(x,y-1,fill_color,boundary_color); } } void polygonShape() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINE_LOOP); glVertex2i(100,100); glVertex2i(250,100); glVertex2i(250,300); glVertex2i(400,300); glVertex2i(400,450); glVertex2i(240,450); glVertex2i(240,310); glVertex2i(100,310); glEnd(); glFlush(); float boundary_color[3],fill_color[3]; boundary_color[0] = 1; boundary_color[1] = 0; boundary_color[2] = 0; fill_color[0]=0; fill_color[1]=1; fill_color[2]=0; boundaryFill(102,102,fill_color,boundary_color); } int main(int argc,char **argv) { glutInit(&argc, argv); // Initializing the library glutInitWindowSize(500,500); glutInitWindowPosition(400,150); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutCreateWindow("Boudary Fill"); myInit(); glutDisplayFunc(polygonShape); glutMainLoop(); return 0; }Output: