Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<GL/glut.h>
- 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}};
- //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}};
- 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}};
- int n;
- void triangle(float *va, float *vb, float *vc) {
- glBegin(GL_TRIANGLES);
- glVertex3fv(va);
- glVertex3fv(vb);
- glVertex3fv(vc);
- glEnd();
- }
- void divideTetra(float *a, float *b, float *c, int m) {
- float v1[3], v2[3], v3[3];
- int j;
- if(m>0) {
- for(j=0; j<3; j++) {
- v1[j] = (a[j]+b[j])/2;
- v2[j] = (a[j]+c[j])/2;
- v3[j] = (b[j]+c[j])/2;
- }
- divideTetra(a, v1, v2, m-1);
- divideTetra(c, v3, v2, m-1);
- divideTetra(b, v1, v3, m-1);
- } else
- triangle(a,b,c);
- }
- void tetra(int m) {
- glColor3fv(colors[0]);
- divideTetra(v[0], v[2], v[3], m);
- glColor3fv(colors[1]);
- divideTetra(v[2], v[1], v[3], m);
- glColor3fv(colors[2]);
- divideTetra(v[1], v[0], v[3], m);
- glColor3fv(colors[3]);
- divideTetra(v[0], v[2], v[1], m);
- }
- void display() {
- glClearColor(1.0, 1.0, 1.0, 1.0);
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- tetra(n);
- glFlush();
- }
- void myReshape(int w, int h) {
- glViewport(0, 0, w, h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- if(w<=h)
- glOrtho(-2.0, 2.0, -2.0*(float)h/(float)w, 2.0*(float)h/(float)w, -10.0, 10.0);
- else
- glOrtho(-2.0*(float)w/(float)h, 2.0*(float)w/(float)h, -2.0, 2.0, -10.0, 10.0);
- glMatrixMode(GL_MODELVIEW);
- glutPostRedisplay();
- }
- int main(int argc, char *argv[]) {
- printf("Enter the number of division: ");
- scanf("%d", &n);
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
- glutInitWindowSize(500, 500);
- glutInitWindowPosition(0, 0);
- glutCreateWindow("3D Gasket 4MT19CS137");
- glutReshapeFunc(myReshape);
- glutDisplayFunc(display);
- glEnable(GL_DEPTH_TEST);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement