## Tuesday, January 16, 2024

### New Village Scenery Computer Graphics Project in OpenGL Source Code

Many of the University including VTU have 'The Department of Computer Science and Engineering' which have Lab projects for students to show thier learning skill which got during thier course study.

VTU Computer Graphics and Visualization Laboratory [15CSL68]

Above mentioned link have the lab programs prescribed by VTU under it course id mentioned have computer graphics project in OpenGL. Under this program students use thier learning ability to show of thier excellence, what they learnt in the course. Many students keeping in focus special efforts to impart  thier knowledge to give best projects.

We in this article we are going to show one of the best project in Computer Graphics Project in OpenGL with free source code. The name of the Project is New Village Scenery.

### Project Description:

In this Computer Graphics Project in OpenGL with free Source Code are going to draw sun, clouds, sky, river, boats, fence, trees, huts. In this projects we demonstrate the moving clouds in the sky and moving boats in the river,  Above is achived by using circle, lines traingle and spheres.

Draw Sky

///sky///
glBegin(GL_POLYGON);
glColor3ub(112,160,228);
glVertex2f(38.0,3.0);
glVertex2f(38.0,14.0);
glVertex2f(-12.0,14.0);
glVertex2f(-12.0,3.0);
glEnd();

Draw the Sun

/// Sun
glPushMatrix();
glColor3d(255,0,0);
glTranslatef(1.0, 7.0, 0);
glutSolidSphere(1.0, 750, 300);
glPopMatrix();

## Implementation

We use GL_QUADS with tranlation in opengl to draw most of the scenery in this new village scenery opengl projects program. As name suggested quads means fourt vertices. We use the glvertex in opengl to join the vertices and make the objects. Below is how vertices are used in opengl.

## Draw Components

In this project we are going to use the different functions to implement the different object like sun in the program. void DrawAllComponents() functions is used to draw all the mentioned objects required in this program. After we draw all the objects and then we call them in the display function - void display(void)

After above functions are implemented we call the keyboard and mouse functions to implement the user interactions and call all of them in main functions.

### User Interaction

In this opengl project below is user interactions

Mouse interactions

Left Mouse button - Increase the Movement of clouds and boats

Right Mouse button - Decrease the Movement of clouds and boats

Key Interactions

s - to stop the boat

r -  to run the boat again

## Source code and Reports Computer Graphics Project in OpenGL

Here you can download computer graphics projects with source code and reports.

Below is soure code -

#include<windows.h>

#include <iostream>

#include<GL/gl.h>

#include <GL/glut.h>

#include <math.h>

#include<windows.h>

float moveC = 0.0f;

float moveB1 = 0.0f;

float moveB2 = 0.0f;

float speed = 0.02f;

void DrawAllComponents()

{

glClearColor(1.0f,1.0f,1.0f,1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3d(1,0,0);

gluOrtho2D(-12,38,-19,14);//range

glMatrixMode(GL_MODELVIEW);

///sky///

glBegin(GL_POLYGON);

glColor3ub(112,160,228);

glVertex2f(38.0,3.0);

glVertex2f(38.0,14.0);

glVertex2f(-12.0,14.0);

glVertex2f(-12.0,3.0);

glEnd();

/// Sun

glPushMatrix();

glColor3d(255,0,0);

glTranslatef(1.0, 7.0, 0);

glutSolidSphere(1.0, 750, 300);

glPopMatrix();

///Cloud-01

glPushMatrix();

glTranslatef(moveC,0.0f,0.0f);

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(1.0, 6.0, 0);

glutSolidSphere(0.7, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(1.0, 7.0, 0);

glutSolidSphere(0.7, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(2.0, 7.0, 0);

glutSolidSphere(0.7, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(2.0, 6.0, 0);

glutSolidSphere(0.7, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(0.0, 6.5, 0);

glutSolidSphere(0.7, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(3.0, 6.5, 0);

glutSolidSphere(0.7, 250, 250);

glPopMatrix();

glPopMatrix();

///cloud-02

glPushMatrix();

glTranslatef(moveC,0.0f,0.0f);

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(15.0, 9.0, 0);

glutSolidSphere(0.8, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(15.0, 8.0, 0);

glutSolidSphere(0.8, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(16.0, 8.0, 0);

glutSolidSphere(0.8, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(16.0, 9.0, 0);

glutSolidSphere(0.8, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(14.0, 8.5, 0);

glutSolidSphere(0.8, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(17.0, 8.5, 0);

glutSolidSphere(0.8, 250, 250);

glPopMatrix();

glPopMatrix();

///cloud-03

glPushMatrix();

glTranslatef(moveC,0.0f,0.0f);

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(22.0, 8.0, 0);

glutSolidSphere(0.75, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(22.0, 7.0, 0);

glutSolidSphere(0.75, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(23.0, 8.0, 0);

glutSolidSphere(0.75, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(23.0, 7.0, 0);

glutSolidSphere(0.75, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(24.0, 7.5, 0);

glutSolidSphere(0.75, 250, 250);

glPopMatrix();

glPushMatrix();

glColor3d(255,255,255);

glTranslatef(21.0, 7.5, 0);

glutSolidSphere(0.75, 250, 250);

glPopMatrix();

glPopMatrix();

///See portion

glPushMatrix();

glBegin(GL_POLYGON);

glColor3ub(65,105,225);

glVertex2f(40.0,-19.0);  /// right-down

glVertex2f(38.0,-11.0); /// right-top

glVertex2f(-12.0,-11.0); /// left-top

glVertex2f(-12.0,-19.0);  /// left-down

glEnd();

///Ground portion

glBegin(GL_POLYGON);

glColor3ub(25,128,0);

glVertex2f(90.0f, -12.5f); /// angle

glVertex2f(38.0f,-12.0f);  /// right-down

glVertex2f(38.0f,3.0f); /// right-top

glVertex2f(-12.0f,3.0f); /// left-top

glVertex2f(-12.0f,-11.0f);  /// left-down

glEnd();

/// House Drawing

///1st House

/// FEG

glColor3ub(162, 116, 36);

glBegin(GL_TRIANGLES);

glVertex2f(-8, -2);

glVertex2f(-6, 0);

glVertex2f(-4, -2);

glEnd();

/// FGIH

glColor3ub(214, 42, 50);

glVertex2f(-8.023, -5.184);

glVertex2f(-8, -2);

glVertex2f(-4, -2);

glVertex2f(-3.999, -7.219);

glEnd();

///ROPQ

glColor3ub(19, 105, 51);

glVertex2f(-6.73, -5.67);

glVertex2f(-6.76, -3.58);

glVertex2f(-5.19, -3.58);

glVertex2f(-5.19, -6.62);

glEnd();

///EGKJ

glColor3ub(124, 85, 17);

glVertex2f(-6, 0);

glVertex2f(4, 0);

glVertex2f(6, -2);

glVertex2f(-4, -2);

glEnd();

///GLMI

glColor3ub(156, 9, 16);

glVertex2f(-4, -2);

glVertex2f(5.22, -2);

glVertex2f(5.26, -5.11);

glVertex2f(-3.99, -7.22);

glEnd();

///VSTU

glColor3ub(216, 215, 111);

glVertex2f(-0.39, -6.40);

glVertex2f(-0.42, -3.62);

glVertex2f(1.95, -3.58);

glVertex2f(1.97, -5.86);

glEnd();

///SZA1V

glColor3ub(19, 105, 51);

glVertex2f(-0.42, -3.62);

glVertex2f(0.38, -4.38);

glVertex2f(0.38, -5.53);

glVertex2f(-0.39, -6.40);

glEnd();

///TB1C1U

glColor3ub(19, 105, 51);

glVertex2f(1.95, -3.58);

glVertex2f(1.21, -4.38);

glVertex2f(1.21, -5.46);

glVertex2f(1.97, -5.86);

glEnd();

///2nd House

///S1R1W1

glColor3ub(0,0,0);

glBegin(GL_TRIANGLES);

glVertex2f(8.09,-5.01);

glVertex2f(10.96,-2.02);

glVertex2f(14.10, -5.01);

glEnd();

///U1V1Z1W1

glColor3ub(145, 0, 12);

glVertex2f(9.15, -5.01);

glVertex2f(9.14, -9.02);

glVertex2f(12.85, -9.04);

glVertex2f(12.84, -5.01);

glEnd();

///A2B2C2D2

glColor3ub(245, 10, 49);

glVertex2f(10.36, -6.79);

glVertex2f(10.35, -8.91);

glVertex2f(11.59, -8.99);

glVertex2f(11.58, -6.79);

glEnd();

///1st Tree

glColor3ub(22, 208, 70);

glVertex2f(14.88, -6.00);

glVertex2f(20, 0);

glVertex2f(24.98, -6.16);

glVertex2f(21.05, -4.96);

glVertex2f(19.09, -4.95);

glEnd();

///NWJ1H1

glColor3ub(191, 158, 24);

glVertex2f(19.02, -6.06);

glVertex2f(20.96, -6.09);

glVertex2f(21, -10.08);

glVertex2f(19.01, -10.08);

glEnd();

/// 2nd Tree

///L1K1M1

glColor3ub(17, 218, 45);

glBegin(GL_TRIANGLES);

glVertex2f(27.02, -6.16);

glVertex2f(30, 0);

glVertex2f(32.93, -6);

glEnd();

///E1F1P1Q1

glColor3ub(191, 158, 24);

glVertex2f(29.09, -6.10);

glVertex2f(31.03, -6.05);

glVertex2f(31.05, -10.03);

glVertex2f(29.06, -9.97);

glEnd();

///Rail Line

///N1B

glColor3ub(155, 29, 29);

glVertex2f(-12, 2);

glVertex2f(38, 3);

glVertex2f(37.98, 2.69);

glVertex2f(-11.98, 1.71);

glEnd();

glColor3ub(155, 29, 29);

glVertex2f(-12.07, 0.72);

glVertex2f(-12.07, 0.48);

glVertex2f(38.02, 1.52);

glVertex2f(38, 1.70);

glEnd();

glColor3ub(0, 0, 0);

glVertex2f(-8, 2.08);

glVertex2f(-7.64, 2.08);

glVertex2f(-7.63, 0.63);

glVertex2f(-8, 0.62);

glEnd();

glColor3ub(0, 0, 0);

glVertex2f(0.97, 2.31);

glVertex2f(1.28, 2.27);

glVertex2f(1.34, 0.76);

glVertex2f(0.97, 0.75);

glEnd();

glColor3ub(0, 0, 0);

glVertex2f(11.98, 2.48);

glVertex2f(12.48, 2.49);

glVertex2f(12.5, 1);

glVertex2f(11.98, 0.98);

glEnd();

glColor3ub(0, 0, 0);

glVertex2f(25.45, 2.75);

glVertex2f(26.09, 2.76);

glVertex2f(26.09, 1.27);

glVertex2f(25.45, 1.26);

glEnd();

glColor3ub(0, 0, 0);

glVertex2f(33.99, 2.92);

glVertex2f(34.48, 2.93);

glVertex2f(34.58, 1.45);

glVertex2f(34.03, 1.44);

glEnd();

glColor3ub(0, 0, 0);

glVertex2f(18.39, 2.69);

glVertex2f(19.16, 2.62);

glVertex2f(19.18, 1.13);

glVertex2f(18.42, 1.11);

glEnd();

///boat-1 speed left to right

glPushMatrix();

glTranslatef(moveB1, 0.0f, 0.0f);

glColor3ub(139,69,19);

glVertex2f(1.0f, -14.0f);

glVertex2f(1.50f, -13.0f);

glVertex2f(-2.0f, -13.0f);

glVertex2f(-3.0f, -14.0f);

glEnd();

glColor3ub(0,0,0);

glVertex2f(2.0f, -14.5f);

glVertex2f(2.0f, -14.0f);

glVertex2f(-3.0f, -14.0f);

glVertex2f(-3.0f, -14.5f);

glEnd();

glBegin(GL_TRIANGLES);

glColor3ub(0,0,0);

glVertex2f(-3.0f, -14.5f);

glVertex2f(-3.0f, -14.0f);

glVertex2f(-4.5f, -13.7f);

glEnd();

glBegin(GL_TRIANGLES);

glColor3ub(0,0,0);

glVertex2f(2.0f, -14.5f);

glVertex2f(3.5f, -13.7f);

glVertex2f(2.0f, -14.0f);

glEnd();

glBegin(GL_TRIANGLES);

glColor3ub(0,0,0);

glVertex2f(2.0f, -14.0f);

glVertex2f(1.5f, -13.0f);

glVertex2f(1.0f, -14.0f);

glEnd();

glPopMatrix();

///boat-2 motion right to left

glPushMatrix();

glTranslatef(moveB2, 0.0f, 0.0f);

glColor3ub(139,69,19);

glVertex2f(22.0f, -17.5f);

glVertex2f(21.0f, -16.5f);

glVertex2f(17.50f, -16.5f);

glVertex2f(18.0f, -17.5f);

glEnd();

glColor3ub(0,0,0);

glVertex2f(22.0f, -18.0f);

glVertex2f(22.0f, -17.5f);

glVertex2f(17.0f, -17.5f);

glVertex2f(17.0f, -18.0f);

glEnd();

glColor3ub(255,99,71);

glVertex2f(20.5f, -16.5f);

glVertex2f(21.0f, -14.5f);

glVertex2f(18.5f, -14.5f);

glVertex2f(18.0f, -16.5f);

glEnd();

glColor3ub(139,69,19);

glVertex2f(19.8f, -14.5f);

glVertex2f(19.8f, -14.0f);

glVertex2f(19.7f, -14.0f);

glVertex2f(19.7f, -14.5f);

glEnd();

glBegin(GL_TRIANGLES);

glColor3ub(0,0,0);

glVertex2f(17.0f, -18.0f);

glVertex2f(17.0f, -17.5f);

glVertex2f(15.5f, -17.2f);

glEnd();

glBegin(GL_TRIANGLES);

glColor3ub(0,0,0);

glVertex2f(22.0f, -17.5f);

glVertex2f(22.0f, -18.0f);

glVertex2f(23.5f, -17.2f);

glEnd();

glBegin(GL_TRIANGLES);

glColor3ub(0,0,0);

glVertex2f(17.0f, -17.5f);

glVertex2f(18.0f, -17.5f);

glVertex2f(17.5f, -16.5f);

glEnd();

glPopMatrix();

//end

glPopMatrix();

glutSwapBuffers();

}

void updateC(int value)

{

if(moveC > +36)

{

moveC = -38;

}

moveC += 0.15;

glutTimerFunc(20, updateC, 0);

glutPostRedisplay();

}

void updateB1(int value)

{

moveB1 += speed;

if(moveB1 > 38)

{

moveB1 = -38;

}

//   moveB1 += 0.17;

glutTimerFunc(20, updateB1, 0); //Notify GLUT to call update again in 25 milliseconds

glutPostRedisplay();

}

void updateB2(int value)

{

if(moveB2 < -36)

{

moveB2 = +38;

}

//Notify GLUT that the display has changed

moveB2 -= 0.13;

glutTimerFunc(20, updateB2, 0); //Notify GLUT to call update again in 25 milliseconds

glutPostRedisplay();

}

void handleKeypress(unsigned char key, int x, int y)

{

switch (key)

{

case 's'://stops

speed = 0.0f;

break;

case 'r'://runs

speed = 0.02f;

break;

glutPostRedisplay();

}

}

void handleMouse(int button, int state, int x, int y)

{

if (button == GLUT_LEFT_BUTTON)

{

speed += 0.05f;

}

else if (button == GLUT_RIGHT_BUTTON)

{

speed -= 0.05f;

}

glutPostRedisplay();

}

void display(void)

{

DrawAllComponents();

glFlush ();

}

void init()

{

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

}

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);

glutInitWindowSize(1300, 700);

glutInitWindowPosition(100,100);

glutCreateWindow(" Village Scenery ");

init();

glutTimerFunc(100, updateC, 1);    // cloud speed

glutTimerFunc(100, updateB1, 0); //Boat 1

glutTimerFunc(100, updateB2, 0); //boat 2

glutKeyboardFunc(handleKeypress);

glutMouseFunc(handleMouse);

glutDisplayFunc(display);

glutMainLoop();

return 0;

}