Future Vision BIE Future Vision BIE


ONE STOP FOR ALL STUDY MATERIALS & LAB PROGRAMS


E MENU Whatsapp Share Join Telegram, to get Instant Updates
× NOTE! Click on MENU to Browse between Subjects...

Advertisement

COMPUTER GRAPHICS LABORATORY WITH MINI PROJECT

[As per Choice Based Credit System (CBCS) scheme]

(Effective from the academic year 2017 - 2018)

SEMESTER - VI

Subject Code 17CSL68

IA Marks 40

Number of Lecture Hours/Week 01I + 02P

Exam Marks 60




Advertisement

17CSL68 - COMPUTER GRAPHICS LABORATORY WITH MINI PROJECT

PROGRAM - 7

Design, develop and implement recursively subdivide a tetrahedron to form 3D sierpinski gasket. The number of recursive steps is to be specified by the user.

Code Credits Prof Shankar R, BMSIT

DESIGN Credits Mr K B Hemanth Raj - Admin




Advertisement

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
#include<stdlib.h>
#include<stdio.h>
#include<GL/glut.h>

typedef float point[3];
point v[]= {{0, 0, 1}, {0, 1, 0}, {-1, -0.5, 0}, {1, -0.5, 0}};
int n;

void triangle(point a,point b,point c)
{
    glBegin(GL_POLYGON);
    glVertex3fv(a);
    glVertex3fv(b);
    glVertex3fv(c);
    glEnd();
}

void divide_triangle(point a,point b,point c,int n)
{
    point v1,v2,v3;
    int j;
    if(n>0)
    {
        for(j=0; j<3; j++)
            v1[j] = (a[j]+b[j])/2;

        for(j=0; j<3; j++)
            v2[j] = (a[j]+c[j])/2;

        for(j=0; j<3; j++)
            v3[j] = (c[j]+b[j])/2;

        divide_triangle(a,v1,v2,n-1);
        glFlush();
        divide_triangle(c,v2,v3,n-1);
        glFlush();
        divide_triangle(b,v3,v1,n-1);
        glFlush();
    }
    else(triangle(a,b,c));
}

void tetrahedron(int n)
{
    glColor3f(1, 0, 0);
    divide_triangle(v[0], v[1], v[2], n);


    glColor3f(0,  1,  0);
    divide_triangle(v[3], v[2], v[1], n);


    glColor3f(0,  0,  1);
    divide_triangle(v[0], v[3], v[1], n);


    glColor3f(0,  0,  0);
    divide_triangle(v[0], v[2], v[3], n);

}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    tetrahedron(n);
    glFlush();
}
void myReshape(int w,int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    if(w<=h)
        glOrtho(-2, 2, -2*(GLfloat)h/(GLfloat)w, 2*(GLfloat)h/(GLfloat)w, -10, 10);
    else
        glOrtho(-2*(GLfloat)w/(GLfloat)h, 2*(GLfloat)w/(GLfloat)h, -2, 2, -10, 10);

    glMatrixMode(GL_MODELVIEW);
    glutPostRedisplay();
}
int main(int argc,char ** argv)
{
    printf("No of Recursive steps/Division: ");
    scanf("%d",&n);
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
    glutCreateWindow(" 3D Sierpinski gasket");

    glutReshapeFunc(myReshape);

    glutDisplayFunc(display);

    glEnable(GL_DEPTH_TEST);

    glClearColor(1, 1, 1, 0);
    glutMainLoop();

    return 0;
}

Advertisement

Input the Number of N

n==2



output
Fig 1.1: n==2 shell prompt .


Advertisement

output
Fig 1.2: n==2 Animated output .


Input the Number of N

n==3



output
Fig 1.3: n==3 shell prompt .

output
Fig 1.4: n==3 Animated output .


Input the Number of N

n==5


Advertisement



output
Fig 1.5: n==5 shell prompt .

output
Fig 1.6: n==5 Animated output .

× Note Please Share the website link with Your Friends and known Students...

-ADMIN

× Note Page Number is specified to navigate between Pages...
T = Text book
QB = Question Bank
AS = Amswer Script


-ADMIN

Advertisement