Tuesday 24 July 2018

projek OpenGL C++ full sourcode kotak double 2D di codeblock

pada animasi kali ini kita akan membuat sebuah animasi berupa kotak. animasi ini dilengkapi sourcode lengkap tinggal copy paste. hasil akhir dari projek ini adalah seperti pada gambar dibawah ini. berupa kotak warna merah dan biru yang bila di pencet akan memutar.


langkah-langkagh untuk membuatnya adalah sebagai berikut.

  1. download terlebih dahulu openGL disini :  View openGL
  2. setting codeblock dengan openGL caranya dapat dilihat disini: view
  3. buka codeblock dan buat projek baru caranya dapat dilihat disini : view
  4. copy semua sourcode yang tersedia di blog ini.
adapun sourcode yang tersedia adalah sebagai berikut ini :



#include <cstdlib>                      // standard definitions
#include <iostream>                     // C++ I/O
#include <cstdio>                       // C I/O (for sprintf)
#include <cmath>                        // standard definitions

#include <GL/glut.h>                    // GLUT
#include <GL/glu.h>                     // GLU
#include <GL/gl.h>                      // OpenGL

using namespace std;                    // make std accessible

//-----------------------------------------------------------------------
// Global data
//-----------------------------------------------------------------------

GLint TIMER_DELAY = 10000;                      // timer delay (10 seconds)
GLfloat RED_RGB[] = {1.0, 0.0, 0.0};            // drawing colors
GLfloat BLUE_RGB[] = {0.0, 0.0, 1.0};

//-----------------------------------------------------------------------
//  Global variables
//-----------------------------------------------------------------------
static bool isReversed = false;                 // draw reversed colors?

//-----------------------------------------------------------------------
//  Callbacks
//      The global variable "isReversed" describes the drawing state.
//      When false, a blue rectangle is drawn on top of red diamond.
//      When true the colors are reversed.  The "isReversed" variable is
//      complemented whenever the left mouse button is clicked or the
//      timer goes off (every 10 seconds).
//-----------------------------------------------------------------------

void myReshape(int w, int h) {
    cout << "MyReshape called width=" << w << " height=" << h << endl;
    glViewport (0, 0, w, h);                    // update the viewport
    glMatrixMode(GL_PROJECTION);                // update projection
    glLoadIdentity();
    gluOrtho2D(0.0, 1.0, 0.0, 1.0);             // map unit square to viewport
    glMatrixMode(GL_MODELVIEW);
    glutPostRedisplay();                        // request redisplay
}
                                                // draw diamond and rectangle
void drawObjects(GLfloat* diamColor, GLfloat* rectColor) {
    glColor3fv(diamColor);                      // set diamond color
    glBegin(GL_POLYGON);                        // draw the diamond
        glVertex2f(0.90, 0.50);
        glVertex2f(0.50, 0.90);
        glVertex2f(0.10, 0.50);
        glVertex2f(0.50, 0.10);
    glEnd();
    glColor3fv(rectColor);                      // set rectangle color
    glRectf(0.25, 0.25, 0.75, 0.75);            // draw the rectangle
}

void myDisplay(void) {                          // display callback
    cout << "MyDisplay called" << endl;
    glClearColor(0.5, 0.5, 0.5, 1.0);           // background is gray
    glClear(GL_COLOR_BUFFER_BIT);               // clear the window

    if (isReversed)                             // draw the objects
        drawObjects(BLUE_RGB, RED_RGB);
    else
        drawObjects(RED_RGB, BLUE_RGB);
    glutSwapBuffers();                          // swap buffers
}

void myTimer(int id) {                          // timer callback
    cout << "Timer just went off.  Reversing colors." << endl;
    isReversed = !isReversed;                   // reverse drawing colors
    glutPostRedisplay();                        // request redraw
    glutTimerFunc(TIMER_DELAY, myTimer, 0);     // reset timer for 10 seconds
}

void myMouse(int b, int s, int x, int y) {      // mouse click callback
    if (s == GLUT_DOWN) {
        cout << "Mouse click detected at coordinates x="
             << x << " and y=" << y << endl;
        if (b == GLUT_LEFT_BUTTON) {
            isReversed = !isReversed;
            cout << "Left mouse click.  Reversing colors." << endl;
            glutPostRedisplay();
        }
    }
}
                                                // keyboard callback
void myKeyboard(unsigned char c, int x, int y) {
    switch (c) {                                // c is the key that is hit
        case 'q':                               // 'q' means quit
            exit(0);
            break;
        default:
            cout << "Hit q to quit.  All other characters ignored" << endl;
            break;
    }
}

//-----------------------------------------------------------------------
//  Main program
//      This does all the set up for the program.  It creates the game
//      and then passes control to glut.
//-----------------------------------------------------------------------

int main(int argc, char** argv)
{
    cout << "\n\
-----------------------------------------------------------------------\n\
  CMSC 425 Sample Program.\n\
  - Click left mouse button to swap colors.\n\
  - Try resizing and covering/uncovering the window.\n\
  - Hit q to quit.\n\
-----------------------------------------------------------------------\n";

    glutInit(&argc, argv);                      // OpenGL initializations
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);// double buffering and RGB
    glutInitWindowSize(400, 400);               // create a 400x400 window
    glutInitWindowPosition(0, 0);               // ...in the upper left
    glutCreateWindow(argv[0]);                  // create the window

    glutDisplayFunc(myDisplay);                 // setup callbacks
    glutReshapeFunc(myReshape);
    glutMouseFunc(myMouse);
    glutKeyboardFunc(myKeyboard);
    glutTimerFunc(TIMER_DELAY, myTimer, 0);
    glutMainLoop();                             // start it running
    return 0;                                   // ANSI C expects this
}



apabila animasi projek ini di run maka akan menghasilkan animasi seperti ini. untuk penjelasan sourcode sudah didalam codingnya, semoga dengan begitu teman2 dapat mengerti alurnya dalam membuat animasi tersebut.


semoga bermanfaat dan membantu teman teman menjalankan tugasnya dalam membuat animasi dengan openGL.







Contoh Projek 3D lainnya.


Baca Juga Projek OpenGL dengan C++ Lainnya  dibawah ini :

 Contoh Projek 2D openGL

Baca juga Animasi 2D untuk projek openGL lainnya dibawah ini

Dasar OpenGL

Baca juga Dasar Dari OpenGL dibawah ini jika kalian ingin menekuninya.


Monday 23 July 2018

openGL projek C++ Membuat Pensil 3D

projek membuat pensil dengan openGL dalam bentuk 3D. full sourcode bisa langsung terapkan dan lihat hasilnya. dalam projek ini kita akan membuat pensil berwarna biru dengan layar berwarna hijau, adapun hasil dari sourcode ini adalah sebagai berikut :





langkah-langkagh untuk membuatnya adalah sebagai berikut.

  1. download terlebih dahulu openGL disini :  View openGL
  2. setting codeblock dengan openGL caranya dapat dilihat disini: view
  3. buka codeblock dan buat projek baru caranya dapat dilihat disini : view
  4. copy semua sourcode yang tersedia di blog ini.
adapun sourcode yang tersedia adalah sebagai berikut ini :


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


void cylinder(float rbase,float rtop,float height);
void pipe(float rbase,float rtop,float height,int resolusi);
void blok(float tebal,int ratiol,int ratiop);

double rotation_y=0,rotation_y_plus=-15,direction;
double Move=30,Moveplus=0;
double rotate_All=0;


GLfloat ambient_light[]={0.0,0.0,0.0,0.0};

GLfloat  source_light[]={1.0,0.0,1.0,1.0};

GLfloat     light_pos[]={100,100.0,0.0,4.0};


void draw3D(void)
{
 glClearColor(0.0,1.0,0.0,0.1);  //putih
 glShadeModel(GL_SMOOTH);
 glViewport(10,100,480,480);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(58.0,(GLfloat)640/(GLfloat)480,1.0,200.0);

 glEnable  (GL_DEPTH_TEST);
 glPolygonMode   (GL_FRONT_AND_BACK,GL_FILL);
 glEnable  (GL_LIGHTING);
 glLightModelfv  (GL_LIGHT_MODEL_AMBIENT,ambient_light);
 glLightfv  (GL_LIGHT0,GL_DIFFUSE,source_light);
 glLightfv  (GL_LIGHT0,GL_POSITION,light_pos);
 glEnable  (GL_LIGHT0);
 glEnable  (GL_COLOR_MATERIAL);
 glColorMaterial (GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
}


GLUquadricObj* quadObj;

void display(void)
{
 quadObj = gluNewQuadric();
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();

 glTranslatef(0.0,0.,-90);
 glPushMatrix();
   glRotatef(1.0,1.0,1.0,1.0);
   glRotatef(rotate_All,1.0,1.0,1.0);

    Move++;//arah putaran
    Move=Move-Moveplus;
       glRotatef(Move,0.0,1.0,0.1);
    Moveplus=10;//kecepatan
    glTranslatef(1.0,0.0,0.);

   //mata pensil
    glColor3f(0,0,0);
    glTranslatef(0.0,0,0);
       //glRotatef(180,1,0,0);
    pipe(1.1,0,2.1,10);

  //ujung pensil
    glColor3f(10,3,0);
    glTranslatef(0.0,0,-4.6);
       //glRotatef(180,1,0,0);
    pipe(2.7,0,6.10,10);

  //badan pensil
    glColor3f(0,0,1);
    glTranslatef(0,0,-42);
    //glRotatef(-39,1,0,0);
    cylinder(1,0.6,40.10);

  //penhapus
    glColor3f(1,5,0);
    glTranslatef(0,0,-7);
    //glRotatef(-39,1,0,0);
    cylinder(1,0.0,20.90);





    /*glColor3f(1,0,0);
    glTranslatef(0,0,28);
    gluCylinder(quadObj, 5.412, 4.25, 8, 50, 50);

    glColor3f(0,1,0);
    glTranslatef(0,0,-17.5);
    gluCylinder(quadObj, 1.9, 8, 8, 50, 50);*/

    glPopMatrix();


  glFlush();
 glutSwapBuffers();
}


void pipe(float rbase,float rtop,float height, int resolusi)
{
 float i;
 glPushMatrix();
 glTranslatef(0.0,0.0,-rbase/4);
 for(i=0;i<=height;i+=rbase/8)
 {
  glTranslatef(0.0,0.0,rbase/8);
  glutSolidTorus(rbase/4,rbase-((i*(rbase-rtop))/height),4,resolusi);
 }
 glTranslatef(0.0,0.0,rbase/4);
 glPopMatrix();
}

void cylinder(float rbase,float rtop,float height)
{
 float i;
 glPushMatrix();
 glTranslatef(0,0.0,-rbase/4);
 for(i=0;i<=height;i+=rbase/8)
 {
  glTranslatef(0,0.0,rbase/8);
  glutSolidTorus(3,rbase-((i*(rbase-rtop))/height),20,16);
 }
 glTranslatef(0,0.0,rbase/4);
 glPopMatrix();
}



int main(int argc,char **argv)
{


 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
 glutInitWindowSize(400,400);
 glutInitWindowPosition(0,0);
 glutCreateWindow("Pensil");
 glutDisplayFunc(display);
 glutIdleFunc(display);
 draw3D();
 glutMainLoop();
 return(0);
}



apabila di run hasilnya akan seperti ini:


semoga bermanfaat dan membantu teman-teman untuk menyelesaikan tugasnya.







Contoh Projek 3D lainnya.


Baca Juga Projek OpenGL dengan C++ Lainnya  dibawah ini :

 Contoh Projek 2D openGL

Baca juga Animasi 2D untuk projek openGL lainnya dibawah ini

Dasar OpenGL

Baca juga Dasar Dari OpenGL dibawah ini jika kalian ingin menekuninya.


Sunday 22 July 2018

membuat projek Hujan 3D dengan openGL C++ di codeblock

ini adalah sebuah projek openGL full sourcode. projek ini membuat sebuah animasi hujan turun dan ditampung didalam tempat penyimpanan. adapun hasil dari projek ini adalah seperti video dibawah ini:


langkah-langkagh untuk membuatnya adalah sebagai berikut.

  1. download terlebih dahulu openGL disini :  View openGL
  2. setting codeblock dengan openGL caranya dapat dilihat disini: view
  3. buka codeblock dan buat projek baru caranya dapat dilihat disini : view
  4. copy semua sourcode yang tersedia di blog ini.
adapun sourcode yang tersedia adalah sebagai berikut ini :


#include<stdio.h>
#include<math.h>
#include<gl/glut.h>
#include<string.h>

char str3[30]="Help:-";
char str4[50]="Press 'q' or 'Q' or 'ESC' to Exit";
char str5[50]="Press 's' or 'S' to Create House";
char str6[50]="press 'r' or 'R' to Rain";
char str7[50]="TURBINE";
char str8[50]="WATER STORAGE";
char str1[30]="CHARCOAL";
char str2[20]="CHLORINE CONTAINER";


#define radian 3.14159/180.0
static GLfloat spin=0.0;
float theta=0.0;
GLfloat x,y;
GLint i;

int l;

void flow2();
void flow3();
void flow4();
void flow5();
void flow6();
void flow7();
void flow8();
void flow9();
void flow10();
void flow11();
void flow12();
void disprectangle();
void disprectangle1();
void disprectangle2();
void drawhouse();
void drawconts();
void drawpump();
void drawtank();
void square();
void rain1();
void circle_draw(GLint,GLint,GLint);
typedef float points[2];
GLfloat count=0;
GLfloat count1=0;
GLfloat house1[10][2]={{-625,255},{-700,400},{-500,375}};
GLfloat house[3][15]={{-700,-700,-550,-550,-550,-400,-400,-675,-675,-625,-625,-700,-550,-400,-550},{-50,150,150,-50,300,300,100,-50,25,25,-50,175,325,325,175},{1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}};
GLfloat conts[3][17]={{-540,-520,-520,-425,-425,-375,-375,-250,-250,-5,-5,10,10,-390,-390,-535,-535},{185,185,-100,-100,-235,-235,-275,-275,-435,-435,-50,-50,-450,-450,-250,-250,165},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
GLfloat pump[3][15]={{-325,-275,-275,-325,-175,-125,-125,-175,-50,30,30,-25,-25,-50,0},{225,225,0,0,225,225,0,0,25,25,-50,-50,-25,-25,0},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
GLfloat tank[3][18]={{-400,-365,-365,-350,-350,-115,-115,-75,-75,-50,-50,-90,-90,-100,-100,-350,-350,-400},{200,200,240,240,360,360,375,375,10,10,-5,-5,360,360,225,225,185,185},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};


/* flow function points */
points waterpoint[]={{-535.0,175.0},{-527.0,175.0}};
points waterpoint2[]={{-527.0,180.0},{-527.0,170.0},{-527.0,160.0},{-527.0,150.0},{-527.0,140.0},{-527.0,130.0},{-527.0,120.0},{-527.0,110.0},{-527.0,100.0},{-527.0,90.0},{-527.0,80.0},{-527.0,70.0},{-527.0,60.0},{-527.0,50.0},{-527.0,40.0},{-527.0,30.0},{-527.0,20.0},{-527.0,10.0},{-527.0,0.0},{-527.0,-10.0},{-527.0,-20.0},{-527.0,-30.0},{-527.0,-40.0},{-527.0,-50.0},{-527.0,-60.0},{-527.0,-70.0},{-527.0,-80.0},{-527.0,-90.0},{-527.0,-100.0},{-527.0,-110.0},{-527.0,-120.0},{-527.0,-130.0},{-527.0,-140.0},{-527.0,-150.0},{-527.0,-160.0},{-527.0,-170.0}};
points waterpoint3[]={{-435.0,-243.0},{-425.0,-243.0},{-415.0,-243.0},{-405.0,-243.0},{-395.0,-243.0},{-385.0,-243.0}};
points waterpoint4[]={{-383.0,-440.0},{-383.0,-430.0},{-383.0,-420.0},{-383.0,-410.0},{-383.0,-400.0},{-383.0,-390.0},{-383.0,-380.0},{-383.0,-370.0},{-383.0,-360.0},{-383.0,-350.0},{-383.0,-340.0},{-383.0,-330.0},{-383.0,-320.0},{-383.0,-310.0},{-383.0,-300.0},{-383.0,-290.0},{-383.0,-280.0},{-383.0,-270.0},{-383.0,-260.0},{-383.0,-250.0}};
points waterpoint5[]={{-250.0,-443.0},{-240.0,-443.0},{-230.0,-443.0},{-220.0,-443.0},{-210.0,-443.0},{-200.0,-443.0},{-190.0,-443.0},{-180.0,-443.0},{-170.0,-443.0},{-160.0,-443.0},{-150.0,-443.0},{-140.0,-443.0},{-130.0,-443.0},{-120.0,-443.0},{-110.0,-443.0},{-100.0,-443.0},{-90.0,-443.0},{-80.0,-443.0},{-70.0,-443.0},{-60.0,-443.0},{-50.0,-443.0},{-40.0,-443.0},{-30.0,-443.0},{-20.0,-443.0},{-10.0,-443.0},{-0.0,-443.0}};
points waterpoint6[]={{3.0,-440.0},{3.0,-430.0},{3.0,-420.0},{3.0,-410.0},{3.0,-400.0},{3.0,-390.0},{3.0,-380.0},{3.0,-370.0},{3.0,-360.0},{3.0,-350.0},{3.0,-340.0},{3.0,-330.0},{3.0,-320.0},{3.0,-310.0},{3.0,-300.0},{3.0,-290.0},{3.0,-280.0},{3.0,-270.0},{3.0,-260.0},{3.0,-250.0},{3.0,-240.0},{3.0,-230.0},{3.0,-220.0},{3.0,-210.0},{3.0,-200.0},{3.0,-190.0},{3.0,-180.0},{3.0,-170.0},{3.0,-160.0},{3.0,-150.0},{3.0,-140.0},{3.0,-130.0},{3.0,-120.0},{3.0,-110.0},{3.0,-100.0},{3.0,-90.0},{3.0,-80.0},{3.0,-70.0},{3.0,-60.0},{3.0,-50.0}};
points waterpoint7[]={{-55.0,3.0},{-63.0,3.0},{-70.0,3.0},{-77.0,3.0},};
points waterpoint8[]={{-83.0,10.0},{-83.0,20.0},{-83.0,30.0},{-83.0,40.0},{-83.0,50.0},{-83.0,60.0},{-83.0,70.0},{-83.0,80.0},{-83.0,90.0},{-83.0,100.0},{-83.0,110.0},{-83.0,120.0},{-83.0,130.0},{-83.0,140.0},{-83.0,150.0},{-83.0,160.0},{-83.0,170.0},{-83.0,180.0},{-83.0,190.0},{-83.0,200.0},{-83.0,210.0},{-83.0,220.0},{-83.0,230.0},{-83.0,240.0},{-83.0,250.0},{-83.0,260.0},{-83.0,270.0},{-83.0,280.0},{-83.0,290.0},{-83.0,300.0},{-83.0,310.0},{-83.0,320.0},{-83.0,330.0},{-83.0,340.0},{-83.0,350.0},{-83.0,360.0},};
points waterpoint9[]={{-85.0,367.0},{-95.0,367.0},{-105.0,367.0}};
points waterpoint10[]={{-107.0,370.0},{-107.0,360.0},{-107.0,350.0},{-107.0,340.0},{-107.0,330.0},{-107.0,320.0},{-107.0,310.0},{-107.0,300.0},{-107.0,290.0},{-107.0,280.0},{-107.0,270.0},{-107.0,260.0},{-107.0,250.0},{-107.0,240.0},{-107.0,230.0}};
points waterpoint11[]={{-110.0,230.0},{-120.0,230.0},{-130.0,230.0},{-140.0,230.0},{-150.0,230.0},{-160.0,230.0},{-170.0,230.0},{-180.0,230.0},{-190.0,230.0},{-200.0,230.0},{-210.0,230.0},{-220.0,230.0},{-230.0,230.0},{-240.0,230.0},{-250.0,230.0},{-260.0,230.0},{-270.0,230.0},{-280.0,230.0},{-290.0,230.0},{-300.0,230.0},{-310.0,230.0},{-320.0,230.0},{-330.0,230.0},{-340.0,230.0}};
points waterpoint12[]={{-357.0,225.0},{-357.0,215.0},{-357.0,205.0},{-357.0,195.0}};
points rectangle[]={{-390.0,-450.0},{-250.0,-450.0},{-250.0,-440.0},{-390.0,-440.0}};
points rectangle1[]={{-350.0,225.0},{-100.0,225.0},{-100.0,235.0},{-350.0,235.0}};
points rectangle2[]={{-535.0,-165.0},{-425.0,-165.0},{-425.0,-170.0},{-535.0,-170.0}};

/*flow functions*/
 void flow1()
{
int k,l;
glPointSize(4.0);
for( k=1;k>=0;k--)
{
if(waterpoint[k][0]==-527.0)
{
waterpoint[k][0]=-535.0;
}
}
for(i=1;i>=0;i--)
{

waterpoint[i][0]=waterpoint[i][0]+0.5;
}
for( l=1;l>=0;l--)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint[l]);
glEnd();
}
}
void flow2()
{

int k,l;
glPointSize(4.0);
for( k=35;k>=0;k--)
{
if(waterpoint2[k][1]==-170.0)
{
waterpoint2[k][1]=175.0;
}
}
    for(i=35;i>=0;i--)
{

waterpoint2[i][1]=waterpoint2[i][1]-0.5;
}
for( l=0;l<=35;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint[l]);
glEnd();
}

}

void flow3()
{
int k,l;
glPointSize(4.0);
for( k=5;k>=0;k--)
{
if(waterpoint3[k][0]==-385.0)
{
waterpoint3[k][0]=-435.0;
}
}
for(i=5;i>=0;i--)
{

waterpoint3[i][0]=waterpoint3[i][0]+0.5;
}
for( l=5;l>=0;l--)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint3[l]);
glEnd();
}

}
void flow4()
{
int k,l;
glPointSize(4.0);
for( k=20;k>=0;k--)
{
if(waterpoint4[k][1]==-440.0)
{
waterpoint4[k][1]=-250.0;
}
}
for(i=20;i>=0;i--)
{

waterpoint4[i][1]=waterpoint4[i][1]-0.5;
}
for( l=0;l<=19;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint4[l]);
glEnd();
}

}



void flow5()
{
int k,l;
glPointSize(4.0);
for( k=26;k>=0;k--)
{
if(waterpoint5[k][0]==0.0)
{
waterpoint5[k][0]=-250.0;
}
}
for(i=0;i<=26;i++)
{

waterpoint5[i][0]=waterpoint5[i][0]+0.5;
}
for( l=1;l<=25;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint5[l]);
glEnd();
}

}
void flow6()
{
int k,l;
glPointSize(4.0);
for( k=40;k>=0;k--)
{
if(waterpoint6[k][1]==-50.0)
{
waterpoint6[k][1]=-440.0;
}
}

for( l=1;l<=39;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint6[l]);
glEnd();
}
for(i=39;i>=0;i--)
{

waterpoint6[i][1]=waterpoint6[i][1]+0.5;
}

}
void flow7()
{
int k,l;
glPointSize(4.0);
for( k=4;k>=0;k--)
{
if(waterpoint7[k][0]==-77.0)
{
waterpoint7[k][0]=-55.0;
}
}

for( l=3;l>=0;l--)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint7[l]);
glEnd();
}
for(i=4;i>=0;i--)
{

waterpoint7[i][0]=waterpoint7[i][0]-0.5;
}

}
void flow8()
{
int k,l;
glPointSize(4.0);
for( k=36;k>=0;k--)
{
if(waterpoint8[k][1]==360.0)
{
waterpoint8[k][1]=10.0;
}
}

for( l=1;l<=36;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint8[l]);
glEnd();
}
for(i=35;i>=0;i--)
{

waterpoint8[i][1]=waterpoint8[i][1]+0.5;
}

}
void flow9()
{
int k,l;
glPointSize(4.0);
for( l=3;l>=1;l--)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint9[l]);
glEnd();
}
for( k=3;k>=0;k--)
{
if(waterpoint9[k][0]==-105.0)
{
waterpoint9[k][0]=-85.0;
}
}
for(i=2;i>=0;i--)
{

waterpoint9[i][0]=waterpoint9[i][0]-0.5;
}

}
void flow10()
{
int k,l;
glPointSize(4.0);
for( k=15;k>=0;k--)
{
if(waterpoint10[k][1]==230.0)
{
waterpoint10[k][1]=370.0;
}
}

for( l=1;l<=15;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint10[l]);
glEnd();
}
for(i=14;i>=0;i--)
{

waterpoint10[i][1]=waterpoint10[i][1]-0.5;
}
if(count>1730)
flow11();
}
void flow11()
{
int k,l;
glPointSize(4.0);
for( l=24;l>=0;l--)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint11[l]);
glEnd();
}
for(k=24;k>=0;k--)
{
if(waterpoint11[k][0]==-340.0)
{
waterpoint11[k][0]=-110.0;
}
}
for(i=23;i>=0;i--)
{

waterpoint11[i][0]=waterpoint11[i][0]-0.5;
}
if(count>1760)
flow12();
}
void flow12()
{
int k,l;
glPointSize(4.0);
for( k=4;k>=0;k--)
{
if(waterpoint12[k][1]==190.0)
{
waterpoint12[k][1]=225.0;
}
}

for( l=1;l<=4;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.25,1.0);
glVertex2fv(waterpoint12[l]);
glEnd();
}
for(i=3;i>=0;i--)
{

waterpoint12[i][1]=waterpoint12[i][1]-0.5;
}

}

void disprectangle1()
{
int l;
glColor3f(0.0,0.25,1.0);
glBegin(GL_POLYGON);
    glVertex2f(-400.0,185.0);
glVertex2f(-350.0,185.0);
glVertex2f(-350.0,200.0);
glVertex2f(-400.0,200.0);
glEnd();
glBegin(GL_POLYGON);
    glVertex2f(-350.0,200.0);
glVertex2f(-350.0,240.0);
glVertex2f(-365.0,240.0);
glVertex2f(-365.0,200.0);
glEnd();

glBegin(GL_POLYGON);
for( l=0;l<=3;l++)
{
glVertex2fv(rectangle1[l]);
}
glEnd();
if(count>1730 && count<4500)
{
rectangle1[2][1]=rectangle1[2][1]+0.04;
rectangle1[3][1]=rectangle1[3][1]+0.04;
}
}

/*rainwater points*/
void rain1();

void rain3();

void rain5();
void rain7();
void rain9();
void rain11();
void rain13();
void rain15();
void rain17();
void rain19();
void rain21();
void rain23();
void rain25();
void rain27();
void rain29();
void rain31();
void rain33();
void rain35();


points rainpoint1[]={{-745.0,400.0},{-745.0,380.0},{-745.0,360.0},{-745.0,340.0},{-745.0,320.0},{-745.0,300.0},{-745.0,280.0},{-745.0,260.0},{-745.0,240.0},{-745.0,220.0},{-745.0,200.0},{-745.0,180.0},{-745.0,160.0},{-745.0,140.0},{-745.0,120.0},{-745.0,100.0},{-745.0,80.0},{-745.0,60.0},{-745.0,40.0},{-745.0,20.0},{-745.0,0.0},{-745.0,-20.0},{-745.0,-40.0},{-745.0,-60.0}};
points rainpoint3[]={{-705.0,400.0},{-705.0,380.0},{-705.0,360.0},{-705.0,340.0},{-705.0,320.0},{-705.0,300.0},{-705.0,280.0},{-705.0,260.0},{-705.0,240.0},{-705.0,220.0},{-705.0,200.0},{-705.0,180.0},{-705.0,160.0},{-705.0,140.0},{-705.0,120.0},{-705.0,100.0},{-705.0,80.0},{-705.0,60.0},{-705.0,40.0},{-705.0,20.0},{-705.0,0.0},{-705.0,-20.0},{-705.0,-40.0},{-705.0,-60.0}};
points rainpoint5[]={{-665.0,400.0},{-665.0,380.0},{-665.0,360.0},{-665.0,340.0},{-665.0,320.0},{-665.0,300.0},{-665.0,280.0},{-665.0,260.0},{-665.0,240.0},{-665.0,220.0},{-665.0,200.0},{-665.0,180.0}};
points rainpoint7[]={{-625.0,400.0},{-625.0,380.0},{-625.0,360.0},{-625.0,340.0},{-625.0,320.0},{-625.0,300.0},{-625.0,280.0},{-625.0,260.0},{-625.0,240.0},{-625.0,220.0},{-625.0,200.0},{-625.0,180.0}};
points rainpoint9[]={{-585.0,400.0},{-585.0,380.0},{-585.0,360.0},{-585.0,340.0},{-585.0,320.0},{-585.0,300.0},{-585.0,280.0},{-585.0,260.0},{-585.0,240.0},{-585.0,220.0},{-585.0,200.0},{-585.0,180.0}};
points rainpoint11[]={{-545.0,400.0},{-545.0,380.0},{-545.0,360.0},{-545.0,340.0},{-545.0,320.0},{-545.0,300.0},{-545.0,280.0},{-545.0,260.0},{-545.0,240.0},{-545.0,220.0},{-545.0,200.0},{-545.0,180.0}};
points rainpoint13[]={{-505.0,400.0},{-505.0,380.0},{-505.0,360.0},{-505.0,340.0},{-505.0,320.0},{-505.0,300.0},{-505.0,280.0},{-505.0,260.0},{-505.0,240.0},{-505.0,220.0},{-505.0,200.0},{-505.0,180.0},{-505.0,160.0},{-505.0,140.0},{-505.0,120.0},{-505.0,100.0},{-505.0,80.0},{-505.0,60.0},{-505.0,40.0},{-505.0,20.0},{-505.0,0.0},{-505.0,-20.0},{-505.0,-40.0},{-505.0,-60.0}};
points rainpoint15[]={{-465.0,400.0},{-465.0,380.0},{-465.0,360.0},{-465.0,340.0},{-465.0,320.0},{-465.0,300.0},{-465.0,280.0},{-465.0,260.0},{-465.0,240.0},{-465.0,220.0},{-465.0,200.0},{-465.0,180.0},{-465.0,160.0},{-465.0,140.0},{-465.0,120.0},{-465.0,100.0},{-465.0,80.0},{-465.0,60.0},{-465.0,40.0},{-465.0,20.0},{-465.0,0.0},{-465.0,-20.0},{-465.0,-40.0},{-465.0,-60.0}};
points rainpoint17[]={{-425.0,400.0},{-425.0,380.0},{-425.0,360.0},{-425.0,340.0},{-425.0,320.0},{-425.0,300.0},{-425.0,280.0},{-425.0,260.0},{-425.0,240.0},{-425.0,220.0},{-425.0,200.0},{-425.0,180.0},{-425.0,160.0},{-425.0,140.0},{-425.0,120.0},{-425.0,100.0},{-425.0,80.0},{-425.0,60.0},{-425.0,40.0},{-425.0,20.0},{-425.0,0.0},{-425.0,-20.0},{-425.0,-40.0},{-425.0,-60.0}};
points rainpoint19[]={{-385.0,400.0},{-385.0,380.0},{-385.0,360.0},{-385.0,340.0},{-385.0,320.0},{-385.0,300.0},{-385.0,280.0},{-385.0,260.0},{-385.0,240.0},{-385.0,220.0},{-385.0,200.0},{-385.0,180.0},{-385.0,160.0},{-385.0,140.0},{-385.0,120.0},{-385.0,100.0},{-385.0,80.0},{-385.0,60.0},{-385.0,40.0},{-385.0,20.0},{-385.0,0.0},{-385.0,-20.0},{-385.0,-40.0},{-385.0,-60.0}};
points rainpoint21[]={{-555.0,400.0},{-555.0,380.0},{-555.0,360.0},{-555.0,340.0},{-555.0,320.0},{-555.0,300.0},{-555.0,280.0}};
points rainpoint23[]={{-515.0,400.0},{-515.0,380.0},{-515.0,360.0},{-515.0,340.0},{-515.0,320.0},{-515.0,300.0},{-515.0,280.0}};
points rainpoint25[]={{-475.0,400.0},{-475.0,380.0},{-475.0,360.0},{-475.0,340.0},{-475.0,320.0},{-475.0,300.0},{-475.0,280.0}};
points rainpoint27[]={{-435.0,400.0},{-435.0,380.0},{-435.0,360.0},{-435.0,340.0},{-435.0,320.0},{-435.0,300.0},{-435.0,280.0}};
points rainpoint29[]={{-695.0,400.0},{-695.0,380.0},{-695.0,360.0},{-695.0,340.0},{-695.0,320.0},{-695.0,300.0},{-695.0,280.0},{-695.0,260.0},{-695.0,240.0},{-695.0,220.0},{-695.0,200.0},{-695.0,180.0}};
points rainpoint31[]={{-655.0,400.0},{-655.0,380.0},{-655.0,360.0},{-655.0,340.0},{-655.0,320.0},{-655.0,300.0},{-655.0,280.0},{-655.0,260.0},{-655.0,240.0},{-655.0,220.0},{-655.0,200.0}};
points rainpoint33[]={{-615.0,400.0},{-615.0,380.0},{-615.0,360.0},{-615.0,340.0},{-615.0,320.0},{-615.0,300.0},{-615.0,280.0},{-615.0,260.0},{-615.0,240.0}};
points rainpoint35[]={{-575.0,400.0},{-575.0,380.0},{-575.0,360.0},{-575.0,340.0},{-575.0,320.0},{-575.0,300.0},{-575.0,280.0},{-575.0,260.0}};




/*rain function*/

void rain1()
{
int k,l;
glPointSize(4.0);
for( k=24;k>=0;k--)
{
if(rainpoint1[k][1]==-60.0)
{
rainpoint1[k][1]=400.0;
}
}

for( l=1;l<=24;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint1[l]);
glEnd();
}
for(i=23;i>=0;i--)
{

rainpoint1[i][1]=rainpoint1[i][1]-2;
}
rain3();
}

void rain3()
{
int k,l;
glPointSize(4.0);
for( k=24;k>=0;k--)
{
if(rainpoint3[k][1]==-60.0)
{
rainpoint3[k][1]=400.0;
}
}

for( l=1;l<=24;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint3[l]);
glEnd();
}
for(i=23;i>=0;i--)
{

rainpoint3[i][1]=rainpoint3[i][1]-2;
}
rain5();
}
void rain5()
{
int k,l;
glPointSize(4.0);
for( k=12;k>=0;k--)
{
if(rainpoint5[k][1]==160.0)
{
rainpoint5[k][1]=400.0;
}
}

for( l=1;l<=12;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint5[l]);
glEnd();
}
for(i=11;i>=0;i--)
{

rainpoint5[i][1]=rainpoint5[i][1]-2;
}
rain7();
}

void rain7()
{
int k,l;
glPointSize(4.0);
for( k=12;k>=0;k--)
{
if(rainpoint7[k][1]==160.0)
{
rainpoint7[k][1]=400.0;
}
}

for( l=1;l<=12;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint7[l]);
glEnd();
}
for(i=11;i>=0;i--)
{

rainpoint7[i][1]=rainpoint7[i][1]-2;
}
rain9();
}

void rain9()
{
int k,l;
glPointSize(4.0);
for( k=12;k>=0;k--)
{
if(rainpoint9[k][1]==160.0)
{
rainpoint9[k][1]=400.0;
}
}

for( l=1;l<=12;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint9[l]);
glEnd();
}
for(i=11;i>=0;i--)
{

rainpoint9[i][1]=rainpoint9[i][1]-1;
}
rain11();
}

void rain11()
{
int k,l;
glPointSize(4.0);
for( k=12;k>=0;k--)
{
if(rainpoint11[k][1]==160.0)
{
rainpoint11[k][1]=400.0;
}
}

for( l=1;l<=12;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint11[l]);
glEnd();
}
for(i=11;i>=0;i--)
{

rainpoint11[i][1]=rainpoint11[i][1]-1;
}
rain13();
}


void rain13()
{
int k,l;
glPointSize(4.0);
for( k=11;k>=0;k--)
{
if(rainpoint13[k][1]==200.0)
{
rainpoint13[k][1]=400.0;
}
}

for( l=1;l<=11;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint13[l]);
glEnd();
}
for(i=13;i>=0;i--)
{

rainpoint13[i][1]=rainpoint13[i][1]-2;
}

rain15();
}
void rain15()
{
int k,l;
glPointSize(4.0);
for( k=8;k>=0;k--)
{
if(rainpoint15[k][1]==240.0)
{
rainpoint15[k][1]=400.0;
}
}

for( l=1;l<=8;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint15[l]);
glEnd();
}
for(i=23;i>=0;i--)
{

rainpoint15[i][1]=rainpoint15[i][1]-1;
}
rain17();
}

void rain17()
{
int k,l;
glPointSize(4.0);
for( k=6;k>=0;k--)
{
if(rainpoint17[k][1]==300.0)
{
rainpoint17[k][1]=400.0;
}
}

for( l=1;l<=6;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint17[l]);
glEnd();
}
for(i=23;i>=0;i--)
{

rainpoint17[i][1]=rainpoint17[i][1]-1;
}

rain19();
}

void rain19()
{
int k,l;
glPointSize(4.0);
for( k=24;k>=0;k--)
{
if(rainpoint19[k][1]==-60.0)
{
rainpoint19[k][1]=400.0;
}
}

for( l=1;l<=24;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint19[l]);
glEnd();
}
for(i=23;i>=0;i--)
{

rainpoint19[i][1]=rainpoint19[i][1]-1;
}
rain21();
}

void rain21()
{
int k,l;
glPointSize(4.0);
for( k=7;k>=0;k--)
{
if(rainpoint21[k][1]==280.0)
{
rainpoint21[k][1]=400.0;
}
}

for( l=1;l<=7;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint21[l]);
glEnd();
}
for(i=11;i>=0;i--)
{

rainpoint21[i][1]=rainpoint21[i][1]-2;
}
rain23();
}

void rain23()
{
int k,l;
glPointSize(4.0);
for( k=7;k>=0;k--)
{
if(rainpoint23[k][1]==280.0)
{
rainpoint23[k][1]=400.0;
}
}

for( l=1;l<=7;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint23[l]);
glEnd();
}
for(i=6;i>=0;i--)
{

rainpoint23[i][1]=rainpoint23[i][1]-2;
}
rain25();
}

void rain25()
{
int k,l;
glPointSize(4.0);
for( k=7;k>=0;k--)
{
if(rainpoint25[k][1]==280.0)
{
rainpoint25[k][1]=400.0;
}
}

for( l=1;l<=7;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint25[l]);
glEnd();
}
for(i=6;i>=0;i--)
{

rainpoint25[i][1]=rainpoint25[i][1]-2;
}
rain27();
}

void rain27()
{
int k,l;
glPointSize(4.0);
for( k=7;k>=0;k--)
{
if(rainpoint27[k][1]==280.0)
{
rainpoint27[k][1]=400.0;
}
}

for( l=1;l<=7;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint27[l]);
glEnd();
}
for(i=6;i>=0;i--)
{

rainpoint27[i][1]=rainpoint27[i][1]-1;
}
rain29();
}

void rain29()
{
int k,l;
glPointSize(4.0);
for( k=12;k>=0;k--)
{
if(rainpoint29[k][1]==200.0)
{
rainpoint29[k][1]=400.0;
}
}

for( l=1;l<=12;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint29[l]);
glEnd();
}
for(i=11;i>=0;i--)
{

rainpoint29[i][1]=rainpoint29[i][1]-1;
}
rain31();
}

void rain31()
{
int k,l;
glPointSize(4.0);
for( k=11;k>=0;k--)
{
if(rainpoint31[k][1]==200.0)
{
rainpoint31[k][1]=400.0;
}
}

for( l=1;l<=11;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint31[l]);
glEnd();
}
for(i=10;i>=0;i--)
{

rainpoint31[i][1]=rainpoint31[i][1]-1;
}
rain33();
}

void rain33()
{
int k,l;
glPointSize(4.0);
for( k=11;k>=0;k--)
{
if(rainpoint33[k][1]==180.0)
{
rainpoint33[k][1]=400.0;
}
}

for( l=1;l<=11;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint33[l]);
glEnd();
}
for(i=7;i>=0;i--)
{

rainpoint33[i][1]=rainpoint33[i][1]-1;
}
rain35();
}

void rain35()
{
int k,l;
glPointSize(4.0);
for( k=5;k>=0;k--)
{
if(rainpoint35[k][1]==300.0)
{
rainpoint35[k][1]=400.0;
}
}

for( l=1;l<=8;l++)
{
glBegin(GL_POINTS);
glColor3f(0.0,0.5,1.0);
glVertex2fv(rainpoint35[l]);
glEnd();
}
for(i=7;i>=0;i--)
{

rainpoint35[i][1]=rainpoint35[i][1]-1;
}

}


/* HOUSE AND OTHERS*/


void drawconts()
{
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINE_STRIP);
for(i=0;i<=16;i++)
{
   glVertex2f(conts[0][i],conts[1][i]);
}
glEnd();
if(count1>60)
drawpump();
}
void drawhouse()
{

    count1=count1+1;
glColor3f(0.5,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(house[0][0],house[1][0]);
glVertex2f(house[0][1],house[1][1]);
glVertex2f(house[0][3],house[1][2]);
glVertex2f(house[0][3],house[1][3]);
glEnd();

glColor3f(0.5,1.0,0.5);//door
glBegin(GL_POLYGON);
glVertex2f(house[0][7],house[1][7]);
glVertex2f(house[0][8],house[1][8]);
glVertex2f(house[0][9],house[1][9]);
glVertex2f(house[0][10],house[1][10]);
glEnd();


glColor3f(1.0,0.0,0.5);
glBegin(GL_POLYGON);
glVertex2f(house[0][2],house[1][2]);
glVertex2f(house[0][5],house[1][5]);
glVertex2f(house[0][6],house[1][6]);
glVertex2f(house[0][3],house[1][3]);
glEnd();

glColor3f(1.0,0.5,0.0);//reqd
glBegin(GL_POLYGON);
glVertex2f(house[0][1],house[1][1]);
glVertex2f(house[0][11],house[1][11]);
glVertex2f(house[0][14],house[1][14]);
glVertex2f(house[0][2],house[1][2]);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(house[0][1],house[1][1]);
glVertex2f(house[0][11],house[1][11]);
glVertex2f(house[0][12],house[1][12]);
glVertex2f(house[0][4],house[1][4]);
glEnd();


glBegin(GL_POLYGON);
glVertex2f(house[0][12],house[1][12]);
glVertex2f(house[0][13],house[1][13]);
glVertex2f(house[0][5],house[1][5]);
glVertex2f(house[0][4],house[1][4]);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(house[0][14],house[1][14]);
glVertex2f(house[0][13],house[1][13]);
glVertex2f(house[0][5],house[1][5]);
glVertex2f(house[0][2],house[1][2]);
glEnd();
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
  glVertex2f(house[0][14],house[1][14]);
glVertex2f(house[0][13],house[1][13]);
glVertex2f(house1[2][0],house1[2][1]);
glVertex2f(house1[0][0],house1[0][1]);

glEnd();
glColor3f(.5,0.0,.5);
glBegin(GL_POLYGON);
glVertex2f(house[0][11],house[1][11]);
glVertex2f(house[0][14],house[1][14]);
glVertex2f(house1[0][0],house1[0][1]);
glEnd();
if(count1>30)
drawconts();
}
void drawpump()
{
glColor3f(.25,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(pump[0][0],pump[1][0]);
glVertex2f(pump[0][1],pump[1][1]);
glVertex2f(pump[0][2],pump[1][2]);
glVertex2f(pump[0][3],pump[1][3]);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(pump[0][4],pump[1][4]);
glVertex2f(pump[0][5],pump[1][5]);
glVertex2f(pump[0][6],pump[1][6]);
glVertex2f(pump[0][7],pump[1][7]);
glEnd();
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINE_LOOP);
glVertex2f(pump[0][8],pump[1][8]);
glVertex2f(pump[0][9],pump[1][9]);
glVertex2f(pump[0][10],pump[1][10]);
glVertex2f(pump[0][11],pump[1][11]);
glVertex2f(pump[0][12],pump[1][12]);
glVertex2f(pump[0][13],pump[1][13]);
glEnd();
glEnd();
glColor3f(1.0,0.0,0.0);
glBegin(GL_POINTS);
glVertex2f(pump[0][14],pump[1][14]);
glEnd();
if(count1>90)
drawtank();
}
void drawtank()
{
glColor3f(1.0,1.0,1.0);
glBegin(GL_LINE_LOOP);
for(i=0;i<=17;i++)
{
    glVertex2f(tank[0][i],tank[1][i]);
}
glEnd();
circle_draw(-525,-240,10);
circle_draw(-505,-240,10);
circle_draw(-485,-240,10);
circle_draw(-465,-240,10);
circle_draw(-525,-200,10);
circle_draw(-505,-200,10);
circle_draw(-485,-200,10);
circle_draw(-465,-200,10);
circle_draw(-520,-220,10);
circle_draw(-500,-220,10);
circle_draw(-480,-220,10);
circle_draw(-460,-220,10);
circle_draw(-520,-180,10);
circle_draw(-500,-180,10);
circle_draw(-480,-180,10);
circle_draw(-460,-180,10);
circle_draw(-445,-240,10);
circle_draw(-445,-200,10);
circle_draw(-440,-220,10);
circle_draw(-440,-180,10);

}
void bitmap()
{
int a,p,b,o;
glColor3f(1.0,0.0,0.0);
glRasterPos2i(80,350);
for( a=0;a<strlen(str3);a++)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,str3[a]);
glColor3f(0.0,1.0,0.0);
glRasterPos2i(100,300);
for( p=0;p<strlen(str5);p++)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,str5[p]);
glColor3f(0.0,0.0,1.0);
glRasterPos2i(100,250);
for( b=0;b<strlen(str6);b++)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,str6[b]);
glColor3f(1.0,0.0,1.0);
glRasterPos2i(100,200);
for( o=0;o<strlen(str4);o++)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,str4[o]);

}
void bitmap1()
{
int l,z,k,m;
glColor3f(1.0,0.0,0.0);

glRasterPos2i(-350,-150);
for( l=0;l<strlen(str1);l++)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,str1[l]);
glRasterPos2i(-190,-200);
for( z=0;z<strlen(str2);z++)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,str2[z]);
glRasterPos2i(-190,-100);
for( k=0;k<strlen(str7);k++)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,str7[k]);

/*glRasterPos2i(-240,250);
for( m=0;m<strlen(str8);m++)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,str8[m]);*/


glRasterPos2i(-340,-60);
for( m=0;m<strlen(str8);m++)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,str8[m]);
}
void line()
{
glColor3f(1.0,0.0,0.0);
glBegin(GL_LINES);
glVertex2f(-440,-180);
glVertex2f(-360,-155);
glVertex2f(-280,-310);
glVertex2f(-200,-210);
glVertex2f(-160,-90);
glVertex2f(-50,-30);

glVertex2f(-290,-40);
glVertex2f(-240,250);

glEnd();
}
void draw_pixel(GLint cx,GLint cy)
{
glColor3f(0.5,0.5,0.5);
glBegin(GL_POINTS);
glVertex2i(cx,cy);
glEnd();
}
void plotpixels(GLint h,GLint k,GLint x,GLint y)
{
draw_pixel(x+h,y+k);
draw_pixel(-x+h,y+k);
draw_pixel(x+h,-y+k);
draw_pixel(-x+h,-y+k);
draw_pixel(y+h,x+k);
draw_pixel(-y+h,x+k);
draw_pixel(y+h,-x+k);
draw_pixel(-y+h,-x+k);
}
void circle_draw(GLint h,GLint k,GLint r)
{
GLint d=1-r,x=0,y=r;
while(y>x)
{
plotpixels(h,k,x,y);
if(d<0) d+=2*x+3;
else
{
d+=2*(x-y)+5;
--y;
}
++x;
}
plotpixels(h,k,x,y);
}

void square()
{
glColor3f(0.0,1.0,1.0);
glBegin(GL_QUADS);
glVertex2f(x,y);
glVertex2f(-y,x);
glVertex2f(-x,-y);
glVertex2f(y,-x);
glEnd();
}
void disprectangle2()
{
glColor3f(0.0,0.25,1.0);
glBegin(GL_POLYGON);
for(l=0;l<=3;l++)
{
glVertex2fv(rectangle2[l]);
}
glEnd();
if(count>450 && count<600)
{
rectangle2[1][1]=rectangle2[1][1]+0.07;
rectangle2[0][1]=rectangle2[0][1]+0.07;
}
if(count>3500&&count<3660)
{
rectangle2[1][1]=rectangle2[1][1]-0.07;
rectangle2[0][1]=rectangle2[0][1]-0.07;
}

}
void disprectangle()
{
glColor3f(0.0,0.25,1.0);

glBegin(GL_POLYGON);
for(l=0;l<=3;l++)
{
glVertex2fv(rectangle[l]);
}
glEnd();
if(count>540 && count<1500)
{
rectangle[2][1]=rectangle[2][1]+0.05;
rectangle[3][1]=rectangle[3][1]+0.05;
}
}
void disprec();
void disprec()
{

if(count>3770 && count<4400)
{
rectangle[2][1]=rectangle[2][1]-0.06;
rectangle[3][1]=rectangle[3][1]-0.06;
}
glColor3f(0.0,0.25,1.0);
glBegin(GL_POLYGON);
glVertex2fv(rectangle[0]);
glVertex2fv(rectangle[1]);
glVertex2fv(rectangle[2]);
glVertex2fv(rectangle[3]);
glEnd();
}
void displayd()
{
glClear(GL_COLOR_BUFFER_BIT);
square();
glutSwapBuffers();
}
unsigned char key2;

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(2.0);
bitmap();
if(key2=='q'||key2=='Q') exit(0);
if(key2=='s'||key2=='S')
{
drawhouse();
if(count1>150)
{
line();
bitmap1();
}
}
if(key2=='r'||key2=='R')
{
count=count+1;
drawhouse();
bitmap();
line();
bitmap1();


if(count<2500)
{
rain1();
}
if(count>370&&count<3600)
flow1();
if(count<3620)
{
  flow2();
  if(count>300&&count<4030)
  {
  disprectangle2();

  }
}
if(count>3770 && count<4200)
disprec();
if(count>500&&count<3730)
flow3();
if(count>520&&count<3750)
flow4();
if(count>540&&count<3770)
disprectangle();
if(count>1530&&count<4250)
flow5();
if(count>1500&&count<4480)
{
square();

}
if(count>1560&&count<4300)
flow6();
if(count>1600&&count<4320)
flow7();
if(count>1620&&count<4340)
flow8();
if(count>1660&&count<4360)
flow9();
if(count>1690&&count<4380)
flow10();
if(count>1790) disprectangle1();

}
glFlush();
glutSwapBuffers();
}

void mykey(unsigned char key,int x,int y)
{
   key2=key;
if(key==27) exit(0);
   if(key=='q'||key=='Q') exit(0);
   if(key=='s'||key=='S') {
drawhouse();
bitmap1();
}
   if(key=='r'||key=='R')
   {
  count=150;
  drawhouse();
  rain1();
  rain35();
   }
}
void myinit()
{
glClearColor(0.0,0.0,0.0,0.0);
glColor3f(1.0,0.0,0.0);
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-750.0,400.0,-500.0,400.0);
}
void idle()
{
theta=theta+15.0;
if(theta>360.0)
theta=theta-360.0;
x=18.0*cos(radian*theta);
y=18.0*sin(radian*theta);
bitmap();
glutPostRedisplay();
}

int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH|GLUT_RGB);
    glutInitWindowPosition(0,0);
    glutInitWindowSize(500,500);
    glutCreateWindow("RAIN WATER HARVESTING");
myinit();
glutDisplayFunc(display);
    glutIdleFunc(idle);
glutKeyboardFunc(mykey);
glutMainLoop();
}



hasil gambar nya bila dijalankan akan menghasilkan bentuk sperti ini :
untuk memulainya adalah sebagai berikut:
S = untuk menampilkan rumah dan lain-lainnya
R = untuk menurunkan air hujannya
Q = untuk exit dari animasi tersebut.



demikian semoga bermanfaat dan dapat dimanfaatkan dengan sebaik-baiknya.

Daftar Pustaka
  1. https://www.openglprojects.in/2017/04/rain-water-harvesting-cg-projects.html#gsc.tab=0




Contoh Projek 3D lainnya.


Baca Juga Projek OpenGL dengan C++ Lainnya  dibawah ini :

 Contoh Projek 2D openGL

Baca juga Animasi 2D untuk projek openGL lainnya dibawah ini

Dasar OpenGL

Baca juga Dasar Dari OpenGL dibawah ini jika kalian ingin menekuninya.


Newer Posts Older Posts Home

Tingkat keanekaragaman hayati tingkat gen

Tingkat keanekaragaman hayati tingkat gen -- Keanekaragaman hayati adalah sebuah istilah untuk menggambarkan keanekaragaman mahluk hidup di ...