Advertisement
Sathvikks8

Untitled

Jul 27th, 2022
814
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.29 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<GL/glut.h>
  3. #define MAXY 400
  4. float x1, y1, x2, y2, x3, y3, x4, y4;
  5. float le[MAXY], re[MAXY];
  6. void myInit() {
  7.     glClearColor(1.0, 1.0, 1.0, 1.0);
  8.     glClear(GL_COLOR_BUFFER_BIT);
  9.     glMatrixMode(GL_PROJECTION);
  10.     glLoadIdentity();
  11.     gluOrtho2D(0, MAXY, 0, MAXY);
  12.     glMatrixMode(GL_MODELVIEW);
  13. }
  14. void drawPoint(float x, float y) {
  15.     glBegin(GL_POINTS);
  16.     glVertex2f(x, y);
  17.     glEnd();
  18.     glFlush();
  19. }
  20. void edgeDetect(float x1, float y1, float x2, float y2) {
  21.     if (y2<y1) {
  22.         float temp = x2; x2=x1; x1=temp;
  23.         temp=y2; y2=y1; y1=temp;
  24.     }
  25.     float mx;
  26.     if (y2-y1 == 0)
  27.         mx = x2-x1;
  28.     else    
  29.         mx=(x2-x1)/(y2-y1);
  30.     int x=x1;
  31.     for (int i=y1; i<=y2; i++) {
  32.         if (x<le[i])
  33.             le[i] = x;
  34.         if (x>re[i])
  35.             re[i] = x;
  36.         x+=mx;
  37.     }
  38. }
  39. void scanfill() {
  40.     for (int i=0; i<MAXY; i++) {
  41.         le[i] = MAXY;
  42.         re[i] = 0;
  43.     }
  44.     edgeDetect(x1, y1, x2, y2);
  45.     edgeDetect(x2, y2, x3, y3);
  46.     edgeDetect(x3, y3, x4, y4);
  47.     edgeDetect(x4, y4, x1, y1);
  48.     for (int y=100; y<300; y++) {
  49.         for (int x=le[y]; x<=re[y]; x++) {
  50.             drawPoint(x, y);
  51.         }
  52.     }
  53. }
  54. void display() {
  55.     x1=200; y1=100; x2=100; y2=200; x3=200; y3=300; x4=300; y4=200;
  56. }
  57. void menu(int c) {
  58.     switch (c) {
  59.         case 1:
  60.             glColor3f(0.0, 0.0, 1.0);
  61.             glBegin(GL_LINE_LOOP);
  62.             glVertex2f(x1, y1);
  63.             glVertex2f(x2, y2);
  64.             glVertex2f(x3, y3);
  65.             glVertex2f(x4, y4);
  66.             glEnd();
  67.             glFlush();
  68.             break;
  69.         case 2:
  70.             glColor3f(0.0, 0.0, 1.0);
  71.             glBegin(GL_LINE_LOOP);
  72.             glVertex2f(x1, y1);
  73.             glVertex2f(x2, y2);
  74.             glVertex2f(x3, y3);
  75.             glVertex2f(x4, y4);
  76.             glEnd();
  77.             glFlush();
  78.             scanfill();
  79.             break;
  80.     }
  81. }
  82. int main(int argc, char* argv[]) {
  83.     glutInit(&argc, argv);
  84.     glutInitWindowPosition(0, 0);
  85.     glutInitWindowSize(500, 500);
  86.     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
  87.     glutCreateWindow("Lab 9");
  88.     myInit();
  89.     glutCreateMenu(menu);
  90.     glutDisplayFunc(display);
  91.     glutAddMenuEntry("Draw Polygon", 1);
  92.     glutAddMenuEntry("Fill Polygon", 2);
  93.     glutAttachMenu(GLUT_RIGHT_BUTTON);
  94.     glutMainLoop();
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement