Advertisement
Sathvikks8

tetra

Jul 15th, 2022
665
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.92 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<GL/glut.h>
  3. float v[4][3] = {{-1.0, 0.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, 0.5, 1.0}, {0.0, 1.0, 0.0}};
  4. //float v[4][3] = {{0.0, 0.0, 1.0}, {0.0, 1.0, 0.0}, {-1.0, -0.5, 0.0}, {1.0, -0.5, 0.0}};
  5. float colors[4][3] = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, 0.0}};
  6. int n;
  7. void triangle(float *va, float *vb, float *vc) {
  8.     glBegin(GL_TRIANGLES);
  9.     glVertex3fv(va);
  10.     glVertex3fv(vb);
  11.     glVertex3fv(vc);
  12.     glEnd();
  13. }
  14. void divideTetra(float *a, float *b, float *c, int m) {
  15.     float v1[3], v2[3], v3[3];
  16.     int j;
  17.     if(m>0) {
  18.         for(j=0; j<3; j++) {
  19.             v1[j] = (a[j]+b[j])/2;
  20.             v2[j] = (a[j]+c[j])/2;
  21.             v3[j] = (b[j]+c[j])/2;
  22.         }
  23.         divideTetra(a, v1, v2, m-1);
  24.         divideTetra(c, v3, v2, m-1);
  25.         divideTetra(b, v1, v3, m-1);
  26.     } else
  27.         triangle(a,b,c);
  28. }
  29. void tetra(int m) {
  30.     glColor3fv(colors[0]);
  31.     divideTetra(v[0], v[2], v[3], m);
  32.     glColor3fv(colors[1]);
  33.     divideTetra(v[2], v[1], v[3], m);
  34.     glColor3fv(colors[2]);
  35.     divideTetra(v[1], v[0], v[3], m);
  36.     glColor3fv(colors[3]);
  37.     divideTetra(v[0], v[2], v[1], m);  
  38. }
  39. void display() {
  40.     glClearColor(1.0, 1.0, 1.0, 1.0);
  41.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  42.     tetra(n);
  43.     glFlush();
  44. }
  45. void myReshape(int w, int h) {
  46.     glViewport(0, 0, w, h);
  47.     glMatrixMode(GL_PROJECTION);
  48.     glLoadIdentity();
  49.     if(w<=h)
  50.         glOrtho(-2.0, 2.0, -2.0*(float)h/(float)w, 2.0*(float)h/(float)w, -10.0, 10.0);
  51.     else
  52.         glOrtho(-2.0*(float)w/(float)h, 2.0*(float)w/(float)h, -2.0, 2.0, -10.0, 10.0);
  53.     glMatrixMode(GL_MODELVIEW);
  54.     glutPostRedisplay();
  55. }
  56. int main(int argc, char *argv[]) {
  57.     printf("Enter the number of division: ");
  58.     scanf("%d", &n);
  59.     glutInit(&argc, argv);
  60.     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
  61.     glutInitWindowSize(500, 500);
  62.     glutInitWindowPosition(0, 0);
  63.     glutCreateWindow("3D Gasket 4MT19CS137");
  64.     glutReshapeFunc(myReshape);
  65.     glutDisplayFunc(display);
  66.     glEnable(GL_DEPTH_TEST);
  67.     glutMainLoop();
  68.     return 0;
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement