0% found this document useful (0 votes)
585 views8 pages

The Sinking Ship

This document contains the code for a computer graphics OpenGL project that simulates a sinking ship scene. It defines functions for drawing various elements of the scene like the ship, water, and rocks. Integer and floating point variables are used to track the position and movement of elements over time. The main function initializes the OpenGL window and display callback and uses timers to repeatedly call the display function to animate the sinking ship simulation.

Uploaded by

Vijayalakshmi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
585 views8 pages

The Sinking Ship

This document contains the code for a computer graphics OpenGL project that simulates a sinking ship scene. It defines functions for drawing various elements of the scene like the ship, water, and rocks. Integer and floating point variables are used to track the position and movement of elements over time. The main function initializes the OpenGL window and display callback and uses timers to repeatedly call the display function to animate the sinking ship simulation.

Uploaded by

Vijayalakshmi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

#include<stdio.

h>
#include<GL/glut.h>
#include<stdlib.h>
#include<time.h>

void rock();
void display1();
void display2();
void display3();
void ship();
void water();

struct timespec jmp, jmp2;

GLint a=0,b=0,c=0,d=0,e=0,f=0,g=500,h=600,x=0,i=0;
GLfloat theta=0.0;

void update(int value)


{
a+=20.0;
glutPostRedisplay();
glutTimerFunc(200,update,0);
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
display1();

if(a>950)

{
b+=20;
display2();
}
if(b==180)
{
jmp.tv_sec = 2;
jmp.tv_nsec = 500000000L;
nanosleep(&jmp , &jmp2);
}
if(b>250)
{

c+=10;
display3();

glFlush();
glutSwapBuffers();
}

void display1()
{
glPushMatrix();
glTranslated(a,75,0.0);
ship();
glPopMatrix();
water();
}

void display2()
{

glClear(GL_COLOR_BUFFER_BIT);
rock();
glPushMatrix();
glTranslated(b,75,0.0);
ship();
glPopMatrix();
water();

void display3()
{
glClear(GL_COLOR_BUFFER_BIT);
x-=1;
rock();
glPushMatrix();
glTranslated(c,100+x*5,0.0);
glRotated(-15,0,0,1);
ship();
glPopMatrix();
water();

void water()
{

glColor3f(0.196078,0.6,0.8);
glBegin(GL_POLYGON);
glVertex2f(0,0);
glVertex2f(1000,0);
glVertex2f(1000,100);
glVertex2f(0,100);
glEnd();
}

void ship()
{

glScaled(24,24,0);

glColor3f(0.329412,0.329412,0.329412); //base
glBegin(GL_POLYGON);
glVertex2f(0.5,5.0);
glVertex2f(3,1);
glVertex2f(22,1);
glVertex2f(24.0,5.0);
glEnd();

glColor3f(1.0,1.0,1.0); //ring
glBegin(GL_POLYGON);
glVertex2f(1.35,3.5);
glVertex2f(1.6,3.2);
glVertex2f(23.2,3.2);
glVertex2f(23.35,3.5);
glEnd();

glColor3f(0.329412,0.329412,0.329412); //base
glBegin(GL_POLYGON);
glVertex2f(21.0,5.0);
glVertex2f(21.0,6.0);
glVertex2f(24.5,6.0);
glVertex2f(24.0,5.0);
glEnd();

glColor3f(0.74902,0.847059,0.847059); //top-mid
glBegin(GL_POLYGON);
glVertex2f(2.0,5.0);
glVertex2f(2.0,12.0);
glVertex2f(15.0,12.0);
glVertex2f(19.5,5.0);
glEnd();

glColor3f(0.137255,0.137255,0.556863); //ring
glBegin(GL_POLYGON);
glVertex2f(2.0,8.2);
glVertex2f(2.0,8.8);
glVertex2f(17.1,8.8);
glVertex2f(17.5,8.2);
glEnd();

glColor3f(0.90,0.91,0.98); //window
glBegin(GL_POLYGON);
glVertex2f(3.0,6.0);
glVertex2f(3.0,7.2);
glVertex2f(4.0,7.2);
glVertex2f(4.0,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(4.7,6.0);
glVertex2f(4.7,7.2);
glVertex2f(5.7,7.2);
glVertex2f(5.7,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(8.1,6.0);
glVertex2f(8.1,7.2);
glVertex2f(9.1,7.2);
glVertex2f(9.1,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(9.8,6.0);
glVertex2f(9.8,7.2);
glVertex2f(10.8,7.2);
glVertex2f(10.8,6.0);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(6.4,6.0);
glVertex2f(6.4,7.2);
glVertex2f(7.4,7.2);
glVertex2f(7.4,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(11.5,6.0);
glVertex2f(11.5,7.2);
glVertex2f(12.5,7.2);
glVertex2f(12.5,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(13.3,6.0);
glVertex2f(13.3,7.2);
glVertex2f(14.3,7.2);
glVertex2f(14.3,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(15.1,6.0);
glVertex2f(15.1,7.2);
glVertex2f(16.1,7.2);
glVertex2f(16.1,6.0);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(16.9,6.0);
glVertex2f(16.9,7.2);
glVertex2f(17.9,7.2);
glVertex2f(17.9,6.0);
glEnd();

glColor3f(0.90,0.91,0.98); //window
glBegin(GL_POLYGON);
glVertex2f(3.0,9.8);
glVertex2f(3.0,11.0);
glVertex2f(4.0,11.0);
glVertex2f(4.0,9.8);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(4.7,9.8);
glVertex2f(4.7,11.0);
glVertex2f(5.7,11.0);
glVertex2f(5.7,9.8);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(8.1,9.8);
glVertex2f(8.1,11.0);
glVertex2f(9.1,11.0);
glVertex2f(9.1,9.8);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(9.8,9.8);
glVertex2f(9.8,11.0);
glVertex2f(10.8,11.0);
glVertex2f(10.8,9.8);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(6.4,9.8);
glVertex2f(6.4,11.0);
glVertex2f(7.4,11.0);
glVertex2f(7.4,9.8);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(11.5,9.8);
glVertex2f(11.5,11.0);
glVertex2f(12.5,11.0);
glVertex2f(12.5,9.8);
glEnd();

glBegin(GL_POLYGON);
glVertex2f(13.3,9.8);
glVertex2f(13.3,11.0);
glVertex2f(14.3,11.0);
glVertex2f(14.3,9.8);
glEnd();

glColor3f(0.329412,0.329412,0.329412); //top-cover
glBegin(GL_POLYGON);
glVertex2f(1.5,12.0);
glVertex2f(1.5,12.5);
glVertex2f(16.0,12.5);
glVertex2f(16.0,12.0);
glEnd();

glColor3f(0.0,0.0,0.0); //chim
glBegin(GL_POLYGON);
glVertex2f(2.5,12.5);
glVertex2f(2.5,16.0);
glVertex2f(5.0,16.0);
glVertex2f(5.0,12.5);
glEnd();

glColor3f(1.0,0.25,0.0); //ring
glBegin(GL_POLYGON);
glVertex2f(2.5,12.5);
glVertex2f(2.5,13.5);
glVertex2f(5.0,13.5);
glVertex2f(5.0,12.5);
glEnd();

glColor3f(1.0,0.25,0.0); //ring
glBegin(GL_POLYGON);
glVertex2f(2.5,14.5);
glVertex2f(2.5,15.5);
glVertex2f(5.0,15.5);
glVertex2f(5.0,14.5);
glEnd();

glColor3f(0.0,0.0,0.0); //chim
glBegin(GL_POLYGON);
glVertex2f(6.0,12.5);
glVertex2f(6.0,16.0);
glVertex2f(8.5,16.0);
glVertex2f(8.5,12.5);
glEnd();

glColor3f(1.0,0.25,0.0); //ring
glBegin(GL_POLYGON);
glVertex2f(6.0,14.5);
glVertex2f(6.0,15.5);
glVertex2f(8.5,15.5);
glVertex2f(8.5,14.5);
glEnd();

glColor3f(1.0,0.25,0.0); //ring
glBegin(GL_POLYGON);
glVertex2f(6.0,12.5);
glVertex2f(6.0,13.5);
glVertex2f(8.5,13.5);
glVertex2f(8.5,12.5);
glEnd();
}

void rock()
{
glPushMatrix();
glTranslated(450,50,0.0);
glScaled(10,10,0);
glColor3f(0.36,0.25,0.20);

if(c>0)
{
glPushMatrix();
glTranslated(0,x,0);
glPushMatrix();
glTranslated(7,2,0.0);
glRotated(-x,0,0,1);
glTranslated(-7,-2,0.0);

glBegin(GL_POLYGON);
glVertex2f(8.1,1);
glVertex2f(7.89,1.23);
glVertex2f(11.26,18);
glVertex2f(13.23,21.33);
glVertex2f(14.23,2.53);
glEnd();

glPopMatrix();
glPushMatrix();

glTranslated(12,3,0.0);
glRotated(x,0,0,1);
glTranslated(-12,-3,0.0);
glBegin(GL_POLYGON);
glVertex2f(11.1,3.5);
glVertex2f(13.2,18.7);
glVertex2f(16.4,18.5);
glVertex2f(18.12,3.65);
glVertex2f(19.21,1.25);
glEnd();

glPopMatrix();
glPopMatrix();
}
else
{
glBegin(GL_POLYGON);
glVertex2f(8.1,1);
glVertex2f(7.89,1.23);
glVertex2f(11.26,18);
glVertex2f(13.23,21.33);
glVertex2f(14.23,2.53);
glEnd();
glBegin(GL_POLYGON);
glVertex2f(11.1,3.5);
glVertex2f(13.2,18.7);
glVertex2f(16.4,18.5);
glVertex2f(18.12,3.65);
glVertex2f(19.21,1.25);
glEnd();
}

glPopMatrix();

void myinit()
{
glClearColor(1.0f,1.0f,1.0f,1.0f);
glColor3f(1.0,0.0,0.0);
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,999.0,0.0,799.0);
}

int main(int argc, char* argv[])

{
int chs;
printf("Project Developed By cseminiprojects.com\n");

printf("\n------------------------------------------------------------------\n");
printf("Steps to run this cg project\n");

printf("\n------------------------------------------------------------------\n");
printf("Step1: Type Any Key and Hit Enter\n");

printf("\n******************************************************************\n\n");
scanf("%d",&chs);

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(1024.0,768.0);
glutInitWindowPosition(0,0);
glutCreateWindow("Sinking Ship");
glutDisplayFunc(display);
myinit();
glutTimerFunc(100,update,0);
glutMainLoop();
return 0;
}

You might also like