Program:
#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(1.0, 1.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(0, 0, 0, 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"); //NAME OF WINDOW init(); //FIRSTLY CALL TO INTIALISE VALUE glutDisplayFunc(display); //DISPLAY glutTimerFunc(200, doFrame, 0); //TIMER FUNC glutMainLoop(); return 0; }
Output: