You are on page 1of 15

// ********* A Program that Displays a Sunset and night scene *********

///////////// Press key 2 for nidht scene ////////////////////


///////////// Press key 4 && 6 for boat movement ////////////////////
#include "windows.h"
#include "glut.h" //OpenGL Libraries
//#include "GLU.h"
//#include "GL.h"
float angle=0;
float a=0;
float an=0;
float Ban=0;
float Wa=0;
float D=-5;
int i;
void Init(void)
{
glClearColor(0,0,0,0);///Background Color set to black
}
//////////////////////////// MOON ////////////////////////
void Moon(void)
{
glColor3f(1,1,1);
glutSolidSphere(.15,50,20);
glTranslatef(-0.05,0,0);
glColor3f(0,0,0);
glutSolidSphere(.15,50,20);
}
////////////////////////// STARS /////////////////////
void Star1(void)
{
glColor3f(1,1,1);
glBegin(GL_POLYGON);
glVertex2f(-.005,0);
glVertex2f(0,0.04);
glVertex2f(0.005,0);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(0,0.005);
glVertex2f(0.04,0);
glVertex2f(0,-0.005);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(0,0.005);
glVertex2f(-0.04,0);
glVertex2f(0,-0.005);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(0.005,0);

glVertex2f(0,-0.04);
glVertex2f(-0.005,0);
glEnd();
}
void Still_Stars(void)
{
glColor3f(1,1,1); // white color for the stars
glBegin(GL_POINTS);
// For drawing stars
glVertex2f(-1.2,.7);
glVertex2f(-1.2,.5);
glVertex2f(-1.1,.6);
glVertex2f(-1.0,.75);
glVertex2f(-0.98,.48);
glVertex2f(-0.5,0);
glVertex2f(-1,.4);
glVertex2f(-0.2,.34);
glVertex2f(-1.1,.2);
glVertex2f(-1.0,.1);
glVertex2f(-0.98,0);
glVertex2f(-1.2,.2);
glVertex2f(-1.2,0);
glVertex2f(-1.1,.1);
glVertex2f(-1.0,.15);
glEnd();
}
////////////////////////// SKY ///////////////////////
void sky(void)
{
glTranslatef(0,0,-.1);
glColor3f(0.3,0,0);
glRectf(-2,0,2,1);
}
//////////////////////// SUN ////////////////////////////////
void Sun(void)
{
glTranslatef(0,-.15,-1);
glColor3f(1,0,0);
//Red for the sun
glutSolidSphere(.38,50,5); //a sphere is Drawn with radius 0.2, Slices
50 && 5 Stacks
}
//////////////////////// WATER ////////////////////////////////
void Water(void)
{
glColor3f(0,0,0.15); //dark blue
glRectf(-1.3,-1,1.3,-.1);
glColor3f(.282,0.227,0.109);
}
//////////////////////// WATER SHADES ////////////////////////////////
void C_S(void)
{
glColor3f(0.376,0.376,0.376); //light gray

glVertex2f(-.7,-.17);
glVertex2f(-.7,-.19);
glVertex2f(-.8,-.19);
glVertex2f(-.8,-.2);
glVertex2f(-1,-.2);
glVertex2f(-1,-.21);
glVertex2f(-.9,-.21);
glVertex2f(-.9,-.23);
glVertex2f(-.7,-.23);
glVertex2f(-.7,-.29);
glVertex2f(-.5,-.29);
glVertex2f(-.5,-.31);
glVertex2f(-.4,-.31);
glVertex2f(-.4,-.33);
glRectf(-.5,-.15,.5,-.13);
glRectf(-.6,-.17,.6,-.15);
glRectf(-.7,-.19,.7,-.17);
glRectf(-.8,-.21,.8,-.19);
glRectf(-1,-.23,1,-.21);
glRectf(-.9,-.29,.9,-.23);
glRectf(-.7,-.31,.7,-.29);
glRectf(-.5,-.33,.5,-.31);
glRectf(-.4,-.35,.4,-.23);
}
void Cloud_Shades(void)
{
glTranslatef(-1.2,-.5,-0.8);
C_S();
glTranslatef(.5,.3,0);
C_S();
glTranslatef(1.4,0,0);
C_S();
glTranslatef(-1.4,-.6,-6);
C_S();
}
void Water_Shades_mid(void)
{
glBegin(GL_POLYGON);
glVertex2f(0,0.01);
glVertex2f(0.4,0);
glVertex2f(0,-0.01);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(0,0.01);
glVertex2f(-0.4,0);
glVertex2f(0,-0.01);
glEnd();
}
//////////////////////////////////////////////////////////////////////
void Water_Shades(void)
{
glColor3f(0.376,0.376,0.376); //light gray
glRotatef(D,0,0,0);
Water_Shades_mid();
}
void Water_Shades2(void)
{

glColor3f(0,0,0.15);
glRotatef(D,0,0,0);
Water_Shades_mid();
}
//////////////////////// CLOUDS////////////////////////////////
void C(void)
{
glColor3f(0.1,0.1,0.1);
glBegin(GL_TRIANGLES);
glVertex2f(-0.6,.3);
glVertex2f(-0.3,.1);
glVertex2f(-.9,.1);
glEnd();
glTranslatef(-0.88,0.13,0);
glutSolidSphere(.03,50,5);
glTranslatef(0.04,0,0);
glutSolidSphere(.03,50,5);
glTranslatef(0.01,0.05,0);
glutSolidSphere(.03,50,5);
glTranslatef(0.05,0.02,0);
glutSolidSphere(.05,50,5);
glTranslatef(0.09,0.05,0);
glutSolidSphere(.08,50,5);
glTranslatef(0.09,0,0);
glutSolidSphere(.1,50,5);
glTranslatef(0.09,-.05,0);
glutSolidSphere(.04,50,5);
for(int i=0;i<8;i++)
{
glTranslatef(0.02,0,0);
glutSolidSphere(.04,50,5);
}
glTranslatef(0,-.06,0);
glutSolidSphere(.04,50,5);
for(i=0;i<8;i++)
{
glTranslatef(0.02,0,0);
glutSolidSphere(.04,50,5);
}
}
void C2(void)
{
glTranslatef(0.2,-.3,-3);
C();
glTranslatef(0.2,-.3,-3);
C();
glTranslatef(0.2,-.3,-3);
C();
glTranslatef(0.2,-.3,-3);
C();
glTranslatef(0.2,-.3,-3);
C();
}
void Clouds(void)
{
C();
glTranslatef(0.3,-.2,0);
C();

glTranslatef(0.3,-.1,0);
C();
glRotatef(-180,0,1,0);
C();
glTranslatef(1.2,0,0);
C();
glTranslatef(0.5,-.1,0);
C();
glTranslatef(0.5,-.1,0);
C();
}
//////////////////////// BIRD ////////////////////////////////
void Bird(void)
{
glColor3f(0,0,0);//Black color for the Bird
glPushMatrix();
glTranslatef(0,0,0);
glutSolidSphere(.05,50,5);
glTranslatef(0.21,0.13,-1);
glutSolidSphere(.07,50,5);
glTranslatef(-.29,0,0);
glBegin(GL_POLYGON);
glVertex2f(0.35,0.03);
glVertex2f(0.4,0.03);
glVertex2f(0.35,.0);
glEnd();
glPopMatrix();
glBegin(GL_TRIANGLES);
glVertex2f(-0.09,-0.1);
glVertex2f(-0.01,0);
glVertex2f(-0.02,-.09);
glEnd();
}
//////////////////////// GRASS ////////////////////////////////
void Grass(void)
{
glColor3f(0,0,0); //Black color for the grass
glRectf(-1.3,-1,1.3,-.6); //grass
}
//////////////////////// GRASS LEAVES////////////////////////////////
void Leaf_M(void)
{
glBegin(GL_POLYGON);
glVertex2f(-0.85,-1.0);
glVertex2f(-0.7,.6);
glVertex2f(-0.91, -1.0);
glEnd();
}
void Leaf_L(void)

{
glBegin(GL_POLYGON);
glVertex2f(0.75,-1.0);
glVertex2f(0.1,.7);
glVertex2f(0.79, -1.0);
glEnd();
}
void Leaf_R(void)
{
glBegin(GL_POLYGON);
glVertex2f(-0.92,-1.0);
glVertex2f(-0.3,.5);
glVertex2f(-0.97, -1.0);
glEnd();
}
void Leaf(void)
{
glBegin(GL_POLYGON);
glVertex2f(-0.92,-1.0);
glVertex2f(-0.9,.8);
glVertex2f(-0.97, -1.0);
glEnd();
}
void Leaf_Small(void)
{
glBegin(GL_POLYGON);
glVertex2f(-0.35,-1.0);
glVertex2f(-0.9,0);
glVertex2f(-0.4, -1.0);
glEnd();
}
void Leaf_Small2(void)
{
glBegin(GL_POLYGON);
glVertex2f(0.25,-1.0);
glVertex2f(0.24,0);
glVertex2f(0.23,0);
glVertex2f(0.21, -1.0);
glEnd();
}
void nest_Leaf1(void)
{
glBegin(GL_POLYGON);
glVertex2f(0.8,-1.5);
glVertex2f(-.5,0.8);
glVertex2f(0.9, -1.5);
glEnd();
}
void nest_Leaf2(void)
{
glBegin(GL_POLYGON);
glVertex2f(-1.2,-.5);
glVertex2f(-.28,0.8);
glVertex2f(-1.3, -.5);
glEnd();
}
void Grass_Leaves(void)
{
glColor3f(0,0,0); //Black color for the grass leaves

nest_Leaf1();
nest_Leaf2();
Leaf_Small();
Leaf_Small2();
Leaf_L();
Leaf_R();
Leaf_M();
Leaf();
glPushMatrix();
glTranslatef(-.13,0,0);
Leaf();
glPushMatrix();
for(int l=0;l<3;l++)
{
glTranslatef(.5,0,0);
Leaf();
}
glPopMatrix();
}
////////////////////////////// BOAT////////////////////////
void Boat(void)
{
glTranslatef(Ban,0,0);
glColor3f(0,0,0);
glBegin(GL_QUADS);
glVertex3f(-1,-0.4,0);
glVertex3f(-1.1,-0.25,0);
glVertex3f(-0.35,-0.25,0);
glVertex3f(-0.5,-0.4,0);
glEnd();
glRectf(-0.95, -0.25, -0.92, 0.1);
glBegin(GL_TRIANGLES);
glVertex3f(-1.1,-0.22,0);
glVertex3f(-.8,-0.22,0);
glVertex3f(-0.85,0.35,0);//-0.945
glEnd();
glRectf(-0.68, -0.25, -0.65, 0.1);
glBegin(GL_TRIANGLES);
glVertex3f(-1.1,-0.2,0);
glVertex3f(-0.2,-0.2,0);
glVertex3f(-0.7,0.35,0);
glEnd();
}
//////////////////////// DISPLAY ////////////////////////////////
void Display(void)
{
int s=0;

an-=20;
Wa-=3;
D-=2;
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0,0,-1);
glPushMatrix();
if(a==-90)
{
glTranslatef(0.9,.6,0);
Moon();
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
Still_Stars();
for(int p=0;p<6;p++)
{
glTranslatef(.4,0,0);
Still_Stars();
}
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();

glPushMatrix();
if(a==-90)
{glTranslatef(0.5,1,-.5);
glRotatef(an,0,0,0);
Star1();}
glPopMatrix();
glPushMatrix();
if(a==-90)
{ glTranslatef(-1.3,.67,-.5);
glRotatef(an,0,0,0);
Star1();}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
glTranslatef(1,.4,-.5);
glRotatef(an,0,0,0);
Star1();
}

glPopMatrix();
glPushMatrix();
if(a==-90)
{
glTranslatef(1.5,.6,-.5);
glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
glTranslatef(1.1,1.2,-.5);
glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
glTranslatef(1.2,.08,-.5);
glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
glTranslatef(-1.5,.4,-.5);
glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{
glTranslatef(-1.1,1.2,-.5);
glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();
glPushMatrix();
if(a==-90)
{glTranslatef(-1.2,.08,-.5);
glRotatef(an,0,0,0);
Star1();}
glPopMatrix();
glPushMatrix();
if(a==-90){
glTranslatef(.2,.5,-.5);

glRotatef(an,0,0,0);
Star1();
}
glPopMatrix();
glPushMatrix();
if(a==-90){ glTranslatef(-.2,.4,-.5);
glRotatef(an,0,0,0);
Star1();}
glPopMatrix();
glPushMatrix();
if(a==-90){glTranslatef(-.7,.3,-.5);
glRotatef(an,0,0,0);
Star1();}
glPopMatrix();
glPushMatrix();
glTranslatef(0,-.1,0);
glRotatef(a,1,0,0) ;
sky();
glTranslatef(0,.4,0);
glRotatef(angle,1,0,0);
Sun();
glPopMatrix();
glPushMatrix();
Water();
glPopMatrix();
glPushMatrix();
glRotatef(angle,1,0,0) ;
glColor3f(1,0,0);
//sun shades
glRectf(-.05,-.12,.05,-.11);
glRectf(-.08,-.13,.08,-.12);
glRectf(-.1,-.14,.1,-.13);
glRectf(-.12,-.15,.12,-.14);
glRectf(-.13,-.16,.13,-.15);
glRectf(-.15,-.17,.15,-.16);
glRectf(-.16,-.18,.16,-.17);
glRectf(-.16,-.19,.16,-.18);
glRectf(-.18,-.2,.18,-.19);
glRectf(-.19,-.21,.19,-.2);
glRectf(-.2,-.22,.2,-.21);
glRectf(-.2,-.23,.2,-.22);
glPopMatrix();
glPushMatrix();
Cloud_Shades();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,0);
Clouds();
glPopMatrix();
glPushMatrix();
glTranslatef(-.1,-.18,-0.5);

Water_Shades2();
for(int i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(.3,-.15,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-.3,-.23,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-.4,-.23,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-.3,-.23,0);
Water_Shades();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades();
}
glPopMatrix();
glPushMatrix();
glTranslatef(.3,-.2,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(.3,-.2,0);
Water_Shades();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);

Water_Shades();
}
glPopMatrix();
glPushMatrix();
glTranslatef(1,-.25,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(.5,-.3,0);
Water_Shades();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades();
}
glPopMatrix();
glPushMatrix();
glTranslatef(.8,-.28,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-.7,-.2,0);
Water_Shades();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-1,-.25,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-.5,-.3,0);
Water_Shades();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades();

}
glPopMatrix();
glPushMatrix();
glTranslatef(-.5,-.45,0);
Water_Shades();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades();
}
glPopMatrix();

glPushMatrix();
glTranslatef(-1,-.3,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(-1.2,-.43,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(0,-.4,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(0,-.3,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();
glPushMatrix();
glTranslatef(0,-.28,0);
Water_Shades2();
for(i=0;i<2;i++)
{
glTranslatef(.1,0,0);
Water_Shades2();
}
glPopMatrix();

glPushMatrix();
glRotatef(5,0,0,1);
Grass(); // Grass function call
glPopMatrix();
glPushMatrix();
Grass_Leaves();
glPopMatrix();
glPushMatrix();
glTranslatef(0.2,0,0);
Bird();
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,-.5);
Boat();
glPopMatrix();

glutPostRedisplay();
glutSwapBuffers();
}
//////////////////////////////// RESHAPE ///////////////////////////////////
void reshape(int w,int h)
{
glViewport
( 0, 0, w, h );
glMatrixMode ( GL_PROJECTION );
glLoadIdentity ( );
if ( h==0 )
gluPerspective ( 80, ( float ) w, 1.0, 5000.0 );
else
gluPerspective ( 80, ( float ) w / ( float ) h, 1.0, 5000.0 );
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity ( );
}
////////////////////////////// KEYBOARD //////////////////////////////
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case '4':
if(Ban!=-1)
{
Ban-=.5;
}
break;
case '6':
if(Ban!=2.5)
{
Ban+=.5;
}
break;
case '8':
if(a!=0)
{
angle+=10;

a+=10;
Ban-=.5;
}
break;
case '2':
if(a!=-90)
{
angle-=10;
a-=10;
Ban+=.5;
}
}
glutPostRedisplay();
}
//////////////////////////////// MAIN ////////////////////////
int main(int a,char** b)
{
glutInit(&a,b);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize( 640,480); // window size
glutInitWindowPosition(200,100); //window position on the screen
glutCreateWindow("Sunset"); //title of the window
Init();
//Init fuction call
glutDisplayFunc(Display);
//display function passed as agrument to the cal
l back Display function
glutReshapeFunc(reshape);
//reshape function passed as agrument to the
call back reshape function
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}

You might also like