Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<GL/glut.h>
- #define MAXY 400
- float x1, y1, x2, y2, x3, y3, x4, y4;
- float le[MAXY], re[MAXY];
- void myInit() {
- glClearColor(1.0, 1.0, 1.0, 1.0);
- glClear(GL_COLOR_BUFFER_BIT);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0, MAXY, 0, MAXY);
- glMatrixMode(GL_MODELVIEW);
- }
- void drawPoint(float x, float y) {
- glBegin(GL_POINTS);
- glVertex2f(x, y);
- glEnd();
- glFlush();
- }
- void edgeDetect(float x1, float y1, float x2, float y2) {
- if (y2<y1) {
- float temp = x2; x2=x1; x1=temp;
- temp=y2; y2=y1; y1=temp;
- }
- float mx;
- if (y2-y1 == 0)
- mx = x2-x1;
- else
- mx=(x2-x1)/(y2-y1);
- int x=x1;
- for (int i=y1; i<=y2; i++) {
- if (x<le[i])
- le[i] = x;
- if (x>re[i])
- re[i] = x;
- x+=mx;
- }
- }
- void scanfill() {
- for (int i=0; i<MAXY; i++) {
- le[i] = MAXY;
- re[i] = 0;
- }
- edgeDetect(x1, y1, x2, y2);
- edgeDetect(x2, y2, x3, y3);
- edgeDetect(x3, y3, x4, y4);
- edgeDetect(x4, y4, x1, y1);
- for (int y=100; y<300; y++) {
- for (int x=le[y]; x<=re[y]; x++) {
- drawPoint(x, y);
- }
- }
- }
- void display() {
- x1=200; y1=100; x2=100; y2=200; x3=200; y3=300; x4=300; y4=200;
- }
- void menu(int c) {
- switch (c) {
- case 1:
- glColor3f(0.0, 0.0, 1.0);
- glBegin(GL_LINE_LOOP);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glVertex2f(x3, y3);
- glVertex2f(x4, y4);
- glEnd();
- glFlush();
- break;
- case 2:
- glColor3f(0.0, 0.0, 1.0);
- glBegin(GL_LINE_LOOP);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glVertex2f(x3, y3);
- glVertex2f(x4, y4);
- glEnd();
- glFlush();
- scanfill();
- break;
- }
- }
- int main(int argc, char* argv[]) {
- glutInit(&argc, argv);
- glutInitWindowPosition(0, 0);
- glutInitWindowSize(500, 500);
- glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
- glutCreateWindow("Lab 9");
- myInit();
- glutCreateMenu(menu);
- glutDisplayFunc(display);
- glutAddMenuEntry("Draw Polygon", 1);
- glutAddMenuEntry("Fill Polygon", 2);
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement