08 Code

Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

// CGL Assignment-8

// Animation using OpenGL


// Problem Statement: Write a program in OpenGL on Linux and perform to animate any one
scene (Windmill)

#include <GL/gl.h>
#include <GL/glut.h>
#include <math.h>

// global variable diclaration


int frameNumber = 0; // frame no

void drawWindmill() // Function to draw windmill


{

int i;

glColor3f(0.0, 0.0, 0.0); // red green blue

glBegin(GL_POLYGON);

glVertex2f(-0.05f, 0); // for drawing rectangular base part


glVertex2f(-0.05f, 3);
glVertex2f(0.05f, 3);
glVertex2f(0.05f, 0);

glEnd();

glTranslatef(0, 3, 0); // x,y,z

glColor3f(1.0, 0.0, 0.0); // red,green,blue (RED PLATES OF WINDMILL)

glRotated(frameNumber * (180.0 / 45), 0, 0, 1); //(angle,x,y,z)

for (i = 0; i < 4; i++) // LOOP TO DRAW FOUR PLATES


{

glRotated(90, 0, 0, 1); // 90,0,0,Z

glBegin(GL_POLYGON);

glVertex2f(0, 0); // FOR DRAWING TYIANGLULAR PLATE

glVertex2f(1.0f, 0.2f);

glVertex2f(1.0f, -0.2f);

glEnd();
}
}

void display() // DISPLAY FUNCTION


{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity(); // TAKES IDENTITY MATRIX

glPushMatrix(); // PUSH MATRIX

glTranslated(2.2, 1.6, 0); // SET POSITION OF WINDMILL

glScaled(0.4, 0.4, 1); // SCALLING WINDMILL WITH POINT (0.4,0.4,1)

drawWindmill(); // FUNCTION CALL TO DRAW WINDMILL

glPopMatrix(); // POP MATRIX

glPushMatrix(); // PUSH MATRIX

glTranslated(3.7, 0.8, 0); // SET POSITION OF WINDMILL

glScaled(0.7, 0.7, 1); // SCALLING WINDMILL WITH POINT(0.7,0.7,1)

drawWindmill(); // FUNCTION CALL TO DRAW WINDMILL

glPopMatrix(); // POP MATRIX

glutSwapBuffers(); // SWAP BUFFER


}

void doFrame(int v)
{
frameNumber++; // INCREMENT FRAME NO

glutPostRedisplay(); // POST REDISPLAY

glutTimerFunc(10, doFrame, 0);


}

void init() // FUNCTION INITIALISATION


{
glClearColor(1, 1, 1, 0);

glMatrixMode(GL_PROJECTION); // MATRIX MODE FOR PROJECTION

glLoadIdentity(); // LOADS IDENTITY MATRIX

glOrtho(0, 7, -1, 4, -1, 1); // MIN X,MAX X,MIN Y,MAX Y,MIN Z,MAX Z VALUE

glMatrixMode(GL_MODELVIEW); // MATRIX MODE FOR MODEL VIEW


}

int main(int argc, char **argv) // MAIN FUNCTION


{
glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(700, 500); // DEFINED WINDOW SIZE 700*500

glutInitWindowPosition(100, 100); // DEFINED WINDOW POSITION 100,100

glutCreateWindow("Windmill Animation"); // NAME OF WINDOW

init(); // FIRSTLY CALL TO INTIALISE VALUE

glutDisplayFunc(display); // DISPLAY

glutTimerFunc(200, doFrame, 0); // TIMER FUNC

glutMainLoop();

return 0;
}

You might also like