Tuesday, March 4, 2025
HomeAnimationOpenGL Projects: Internal combustion engine - IC engine

OpenGL Projects: Internal combustion engine – IC engine


In this post we are going to referring to a project that involves computer graphics related to an internal combustion (IC) engine in particular petrol engine.We are going to focus on the design of engine components, simulations of the engine cycle and will going to show visualizations of how the internal combustion (IC) engine works.

An internal combustion engine (IC Engine) is a type of heat engine that generates power by burning (using oxidizer usually air) fuel (typically gasoline(petrol), diesel, or natural gas etc) inside a combustion chamber. IC engines are used in many vehicles, including cars, motorcycles, trucks, and airplanes. Below is Figure of an Typical  IC engine.

The cycle repeats continuously, with pistons moving up and down, creating the power needed to drive a vehicle or perform work. There are two common types of internal combustion engines:

//Simple Program:

#include

#include

#include

void *font = GLUT_BITMAP_TIMES_ROMAN_24; char buff[10]; void *fonts[] = { GLUT_BITMAP_9_BY_15, GLUT_BITMAP_TIMES_ROMAN_10, GLUT_BITMAP_TIMES_ROMAN_24 }; int cc=25,cb=65,s=0,speed=30,status=1; float pointer=25; typedef struct { GLfloat x,y;} Pt; Pt q1, q2,q3,q4; GLfloat colors[][3] = {{0.5,0.5,0.5},{0.5,0.5,0.5},{0.8,0.8,0.8},{0.8,0.8,0.8},{0.8,0.8,0.8},{0.4,0.4,0.4}}; void init() { glClearColor(0.0,0,0,0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,499.0,0.0,499.0); glutPostRedisplay(); } void DrawLine(Pt n1, Pt n2) { glBegin(GL_LINES); for (int i=0;i<3;i++){ glVertex2f(n1.x+i, n1.y+i); glVertex2f(n2.x+i, n2.y+i); } glEnd(); // glFlush(); } void point (float x,float y){ glPointSize(10.0f); glBegin(GL_POINTS); glVertex2f(x,y); glEnd(); //glFlush(); } void rect(Pt n1, Pt n2,Pt n3, Pt n4){ glBegin(GL_QUADS); // Draw The Cube Using quads // glColor3f(0.0f,1.0f,0.0f); // Color Blue glVertex2f(n1.x, n1.y); glVertex2f(n2.x, n2.y); glVertex2f(n3.x, n3.y); glVertex2f(n4.x, n4.y); glEnd(); // End Drawing The Cube //glFlush(); } void Circle(float cx, float cy, float r, int num_segments,int h) { //glColor3f(0.0,0.0,1.0); float xx,yy,n; if(h==1) glBegin(GL_LINE_LOOP);// for not filled circle else glBegin(GL_TRIANGLE_FAN); for (int ii = 0; ii < num_segments; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component glVertex2f(x + cx, y + cy);//output vertex } glEnd(); } void quad(Pt n1, Pt n2,int i){ glBegin(GL_QUADS); // Draw The Cube Using quads // glColor3f(0.0f,1.0f,0.0f); // Color Blue glVertex2f(n1.x-i, n1.y); glVertex2f(n1.x+i, n1.y); glVertex2f(n2.x+i, n2.y); glVertex2f(n2.x-i, n2.y); glEnd(); // End Drawing The Cube //glFlush(); } void quadd(Pt n1, Pt n2){ glBegin(GL_QUADS); // Draw The Cube Using quads //glColor3f(0.0f,1.0f,0.0f); // Color Blue glVertex2f(n1.x, n1.y-5); glVertex2f(n1.x, n1.y+5); glVertex2f(n2.x, n2.y+5); glVertex2f(n2.x, n2.y-5); glEnd(); // End Drawing The Cube //glFlush(); } void rectangle(Pt n1, Pt n2,int i){ glBegin(GL_QUADS); // Draw The Cube Using quads //glColor3f(0.0f,1.0f,0.0f); // Color Blue glVertex2f(n1.x-i, n1.y); glVertex2f(n2.x+i, n1.y); glVertex2f(n2.x+i, n2.y); glVertex2f(n1.x-i, n2.y); glEnd(); // End Drawing The Cube //glFlush(); } void outlet(float x,float y){ glColor3fv(colors[3]); glBegin(GL_TRIANGLE_FAN); if(s==1 ) { if(cc>=75 && cc<100 || cc>=0 && cc<=25) glColor3f(0.9,0.96,0.96); } if(s==0){ if(cc>25 && cc<=50){ float r=(cc-25)*0.006; glColor3f(0.9-(r),0.95-(r),0.95-(r)); }} float cx=x+50,cy=y+225,r=32; for (int ii = 0; ii < 100; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=25 && ii<=50) glVertex2f(x + cx, y + cy);//output vertex } r=10; for (int ii = 100; ii >=0; ii--) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=25 && ii<=50) glVertex2f(x + cx, y + cy);//output vertex } glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(x+100, y+234); glVertex2f(x+100, y+256); glVertex2d(x+41, y+256); glVertex2f(x+41, y+234); glEnd(); } void outletcover(float x,float y){ glColor3fv(colors[1]); //glColor3f(0,0,0); glBegin(GL_TRIANGLE_FAN); float cx=x+50,cy=y+225,r=34; for (int ii = 0; ii < 100; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=25 && ii<=50) glVertex2f(x + cx, y + cy);//output vertex } r=8; for (int ii = 100; ii >=0; ii--) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=25 && ii<=50) glVertex2f(x + cx, y + cy);//output vertex } glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(x+100, y+232); glVertex2f(x+100, y+259); glVertex2d(x+42, y+259); glVertex2f(x+42, y+232); glEnd(); } void Crank(float cx, float cy, float r, int num_segments) { glColor3f(0.0,0.0,1.0); float xx,yy,n; glBegin(GL_LINE_LOOP);// for not filled circle //glBegin(GL_TRIANGLE_FAN); for (int ii = 0; ii < num_segments; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii==cc){ xx=x+ cx; yy=y+ cy; } } glEnd(); if(cc>=0 && cc<25) {n=cy+125+(cc*1.4);} else if(cc>=25 && cc<=75) {n=cy+160-((cc-25)*1.4);} else if(cc>75 && cc<100) {n=cy+90+((cc-75)*1.4);} glColor3f(0.0f,1.0f,0.0f); q1.x=xx; q1.y=yy; /*glColor3f(0.0f,0.0f,1.0f); q2.x=cx; q2.y=cy; quad(q1,q2,5); q2.x=cx; q2.y=cy; quadd(q1,q2);*/ glColor3f(0.4f,0.4f,0.4f); q2.x=cx; q2.y=n; quad(q1,q2,5); q1.x=cx; q1.y=n; q2.x=cx; q2.y=n+40; //glColor3f(0.0f,0.0f,1.0f); glColor3fv(colors[0]); quad(q1,q2,45); glColor3f(0.4f,0.4f,0.4f); glColor3f(0.4f,0.4f,0.4f); q1.x=cx; q1.y=n+18; q2.x=cx; q2.y=n+28; //quad(q1,q2,45); q1.x=cx; q1.y=n+30; q2.x=cx; q2.y=n+39; //quad(q1,q2,45); Circle(xx,yy,10,100,0);//crank connector Circle(cx,n+10,10,100,0);//piston connecting rod } void Crankrod(float cx, float cy, float r, int num_segments) { float xx,yy,n,xxx,yyy,flg=0; glBegin(GL_TRIANGLE_FAN); for (int ii = 0; ii < num_segments; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=cb && ii<=(cb+20)){ glVertex2f(x + cx, y + cy);//output vertex if(flg!=1) {xxx=x+cx; yyy=y+cy;} } if(cb>=80 && ii<=(20-(100-cb))){ glVertex2f(x + cx, y + cy);//output vertex xxx=x+cx; yyy=y+cy; flg=1; } if(ii==cb){ xx=x+ cx; yy=y+ cy; } } glEnd(); q1.x=xx; q1.y=yy; q2.x=xxx; q2.y=yyy; q3.x=cx; q3.y=cy; q4.x=cx; q4.y=cy; rect(q1,q2,q3,q4); //glColor3f(0.0,0.0,0.0); //Circle(xx,yy,3,100,0); }void valve(float x,float y){ float p=0; if(s==0){ if(cc>=25 && cc<=50) p=-(cc-25)*0.6; else if(cc>50 && cc<75) p=-15+(cc-50)*0.6; } //glColor3f(1.0f,0.0f,0.0f); glColor3fv(colors[5]); q1.x=x-30; q1.y=y+225+p; q2.x=x-30; q2.y=y+220+p; quad(q1,q2,10); q1.x=x-30; q1.y=y+225+p; q2.x=x-30; q2.y=y+276+p; quad(q1,q2,2); p=0; if(s==1){ if(cc>=0 && cc<25) p=-15+(cc)*0.6; if(cc>=75 && cc<100) p=-(cc-75)*0.6; } q1.x=x+30; q1.y=y+225+p; q2.x=x+30; q2.y=y+220+p; quad(q1,q2,10); q1.x=x+30; q1.y=y+225+p; q2.x=x+30; q2.y=y+276+p; quad(q1,q2,2); } void cover(float x,float y){// x=900;y=500; //glColor3f(1.0,1.0,0.0); glBegin(GL_TRIANGLE_FAN); glVertex2d(x-120,y+60); glVertex2d(x-55,y+125); glVertex2d(x+55,y+125); glVertex2d(x+120,y+60); glVertex2d(x+120,y-120); glVertex2d(x-120,y-120); glEnd(); glBegin(GL_TRIANGLE_FAN); //glVertex2d(780,560); glVertex2d(x-55,y+125); glVertex2d(x-55,y+225); glVertex2d(x-20,y+250); glVertex2d(x+20,y+250); glVertex2d(x+55,y+225); glVertex2d(x+55,y+125); glEnd(); } void innlet(float x,float y){ glColor3fv(colors[3]); glBegin(GL_TRIANGLE_FAN); if(s==0 ) { if(cc>=27 && cc<75) glColor3f(0.0,0.5,1.0); if(cc>=75 && cc<100){ float r=(cc-75)*0.032; glColor3f(0.0+r,0.5+(r/2.66),1.0-(r/4)); } } float cx=x-50,cy=y+225,r=32; for (int ii = 0; ii < 100; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=0 && ii<=25) glVertex2f(x + cx, y + cy);//output vertex }r=10; for (int ii = 100; ii >=0; ii--) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=0 && ii<=25) glVertex2f(x + cx, y + cy);//output vertex } glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(x-100, y+256); glVertex2f(x-100, y+235); glVertex2d(x-49,y+235); glVertex2f(x-49, y+256); glEnd(); } void innletcover(float x,float y){ glColor3fv(colors[1]); glBegin(GL_TRIANGLE_FAN); float cx=x-50,cy=y+225,r=34; for (int ii = 0; ii < 100; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=0 && ii<=25) glVertex2f(x + cx, y + cy);//output vertex }r=8; for (int ii = 100; ii >=0; ii--) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=0 && ii<=25) glVertex2f(x + cx, y + cy);//output vertex } glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(x-100, y+259); glVertex2f(x-100, y+232); glVertex2d(x-47,y+232); glVertex2f(x-47, y+259); glEnd(); } void spark(float x,float y){ glColor3f(1,1,0.1); glBegin(GL_TRIANGLE_FAN); //glBegin(GL_LINE_LOOP); //glVertex2f(x-5,y+220); glVertex2f(x+3,y+220); glVertex2f(x+16,y+225); glVertex2f(x+10,y+220); glVertex2f(x+17,y+215); glVertex2f(x-3,y+220); glVertex2f(x-16,y+225); glVertex2f(x-11,y+220); glVertex2f(x-17,y+215); glVertex2f(x+3,y+220); glVertex2f(x+5,y+220); glVertex2f(x,y+210); glVertex2f(x-5,y+220); glEnd(); } void plug(float x,float y){ //float x=217,y=301; glColor3f(0.3,0.3,0.3); glBegin(GL_TRIANGLE_FAN); glVertex2f(x-2, y+19); glVertex2f(x+3, y+19); glVertex2f(x+3, y+24); glVertex2f(x-2, y+24); glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(x-7, y+19); glVertex2f(x+8, y+19); glVertex2f(x+8, y+1); glVertex2f(x-7, y+1); glEnd(); glColor3f(0.0,0.0,0.0); glBegin(GL_QUADS); glVertex2f(x-17, y-1); glVertex2f(x+19, y-1); glVertex2f(x+19, y+1); glVertex2f(x-17, y+1); glEnd(); glColor3f(1.8,1.8,1.0); glBegin(GL_TRIANGLE_FAN); glVertex2f(x-9, y-1); glVertex2f(x+10, y-1); glVertex2f(x+10, y-31); glVertex2f(x-9, y-31); glEnd(); glColor3f(0.0,0.0,0.0); glBegin(GL_LINES); for(int i=0;i<5;i++) { glVertex2f(x+10, (y-1)-(5*i)); glVertex2f(x-9, (y-6)-(5*i)); } glEnd(); glColor3f(1.8,1.8,1.0); glPointSize(7.0f); glBegin(GL_POINTS); glVertex2d(x+1,y-31); glEnd(); glBegin(GL_LINES); glVertex2d(x+6,y-32); glVertex2d(x+6,y-41); glEnd(); glBegin(GL_LINES); glVertex2d(x-2,y-41); glVertex2d(x+6,y-41); glEnd(); glColor3f(0.3,0.3,0.3); glBegin(GL_LINES); float cx=x+25,cy=y+24,r=25; for (int ii = 0; ii < 100; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(100);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=25 && ii<=50) glVertex2f(x + cx, y + cy);//output vertex } glEnd(); } void fuel(float x,float y){ float j,i=x,k=y+227,l,flag=0; if(s==0){k=y+224; if( cc>25 && cc<=75){ l=y+170-((cc-25)*1.4); flag=1; glColor3f(0.0,0.5,1.0);//fuel color } if( cc>75 && cc<100){ l=y+100+((cc-75)*1.4); flag=1; float rr=(cc-75)*0.02; glColor3f(rr,0.5-(rr/2),1-rr);//fuel color } if( cc>=0 && cc<25){ l=y+135+(cc*1.4); flag=1; float rr=(cc)*0.02; glColor3f(rr+0.5,0.25-(rr/2),0.5-rr);//fuel color } } if(s==1){ k=(y+225); if(cc>=25 && cc<=75){ l=y+170-((cc-25)*1.4); flag=1; float rr=(cc-25)*0.02; if(rr>=0.95) rr=0.95; glColor3f(1-(rr*0.1),0+rr,0+rr); } if( cc>75 && cc<100){ l=y+100+((cc-75)*1.4); flag=1; glColor3f(0.9,0.95,0.95); } if( cc>=0 && cc<=25){ l=y+135+(cc*1.4); flag=1; glColor3f(0.9,0.95,0.95);//gas color } } if(flag==1){ glBegin(GL_LINES); for(j=k;j>l;j--) { glVertex2f(i-43,j); glVertex2f(i+44,j); } glEnd(); } } void board(float x,float y){ //glColor3f(0.0,1.0,1.0); glColor3f(0.95,1,1); glBegin(GL_QUADS); glVertex2f(x-450,y-250); glVertex2f(x+450,y-250); glVertex2f(x+450,y+450); glVertex2f(x-450,y+450); glEnd(); //glColor3f(0.85,1,1); glColor3f(0.2,.8,.5); glBegin(GL_QUADS); glVertex2f(x-400,y-200); glVertex2f(x+400,y-200); glVertex2f(x+400,y+400); glVertex2f(x-400,y+400); glEnd(); } void smallboard(float x,float y){ //glColor3f(0.0,1.0,1.0); glColor3f(0.95,1,1); glBegin(GL_QUADS); glVertex2f(x-200,y-200); glVertex2f(x+200,y-200); glVertex2f(x+200,y+200); glVertex2f(x-200,y+200); glEnd(); //glColor3f(0.85,1,1); glColor3f(0.2,.8,.5); glBegin(GL_QUADS); glVertex2f(x-160,y-160); glVertex2f(x+160,y-160); glVertex2f(x+160,y+160); glVertex2f(x-160,y+160); glEnd(); } /*void board(float x,float y){ glColor3f(0.3,0.3,0.3); //glColor3f(0.95,1,1); glBegin(GL_QUADS); glVertex2f(x-550,y-250); glVertex2f(x+550,y-250); glVertex2f(x+550,y+450); glVertex2f(x-550,y+450); glEnd(); glColor3f(1.0,1.0,1.0); //glColor3f(0.2,.8,.5); glBegin(GL_QUADS); glVertex2f(x-500,y-200); glVertex2f(x+500,y-200); glVertex2f(x+500,y+400); glVertex2f(x-500,y+400); glEnd(); }*/ void text(int x, int y, char *string,int j) { int len, i; glRasterPos2f(x, y); len = (int) strlen(string); for (i = 0; i < len; i++) { glutBitmapCharacter(fonts[j], string[i]); } } void indicator(float cx, float cy, float r, int num_segments,int h) { //glColor3f(0.0,0.0,1.0); float xx,yy,n; glBegin(GL_TRIANGLE_FAN); glVertex2f(cx, cy);//output vertex for (int ii = 0; ii <= num_segments; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii>=h && ii<=(h+25)) glVertex2f(x + cx, y + cy);//output vertex } glEnd(); } void kk(float cx, float cy, float r, int num_segments){ for (int ii = 0; ii <= num_segments; ii++) { float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component if(ii==pointer || ii==(pointer-0.5)) glVertex2f(x + cx, y + cy);//output vertex } } void tip(float cx, float cy, float r, int num_segments){ float xx,yy,n; glBegin(GL_TRIANGLE_FAN); glVertex2f(cx-5, cy-5);//output vertex kk(cx,cy,r,num_segments); glVertex2f(cx+5, cy-5);//output vertex glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(cx-5, cy-5);//output vertex kk(cx,cy,r,num_segments); glVertex2f(cx-5, cy+5);//output vertex glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(cx-5, cy+5);//output vertex kk(cx,cy,r,num_segments); glVertex2f(cx+5, cy+5);//output vertex glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex2f(cx+5, cy-5);//output vertex kk(cx,cy,r,num_segments); glVertex2f(cx+5, cy+5);//output vertex glEnd(); } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glClear(GL_COLOR_BUFFER_BIT); int x=800,y=500; //Circle(x, y, 100, 100,0); glColor3f(0.0,1.0,1.0); board(x,y); glColor3fv(colors[1]); cover(x,y); glColor3f(0.8,0.8,0.8); innletcover(x,y); innlet(x,y); outletcover(x,y); outlet(x,y); // glColor3f(1.0,1.0,1.0); glColor3fv(colors[4]); Circle(x, y, 110, 100,0); q1.x=x-44; q1.y=y+100; q2.x=x-44; q2.y=y+225; q3.x=x+44; q3.y=y+225; q4.x=x+44; q4.y=y+100; rect(q1,q2,q3,q4); //inner cylinder fuel(x,y); glColor3f(0.0,0.0,1.0); //reectangle(); //point(x,y+325); glColor3fv(colors[0]); //Crankrod(x, y, 65, 100); Circle(x, y, 50, 100,0); glColor3fv(colors[2]); Crank(x, y, 35, 100); glColor3f(0.0,0.0,1.0); valve(x,y); plug(x,y+253); if(s==0 && cc>=22 && cc<=25 ) spark(x+1,y-2); if(s==1 && cc<=28 && cc>=25 ) spark(x+1,y-2); // title glColor3f(0.0,0.0,1.0); text(x-115,y+415,"IC Petrol Engine",2); y+=150; smallboard(x+700,y); glColor3f(0.3,0.3,0.3); Circle(x+700, y, 145, 100,0); glColor3f(0.9,0.95,0.95); indicator(x+700, y, 140, 100,0); //exhaust glColor3f(0.0,0.5,1.0); indicator(x+700, y, 140, 100,25); //suction glColor3f(0.8,0.5,0.5); indicator(x+700, y, 140, 100,50);//compression glColor3f(0.9,1.0,0.5); indicator(x+700, y, 140, 100,75);// working glColor3f(0.3,0.3,0.3); Circle(x+700, y, 15, 100,0); //glColor3f(0.0,0.0,0.0); tip(x+700, y, 100, 100); glColor3f(0.0,0.0,1.0); text(x+600,y+170,"Stroke Indicator",2); //lables glColor3f(0.0,0.5,1.0); point(x+520,y-240); glColor3f(0.5,0.9,1.0); text(x+540,y-245,"Suction Stroke",0); glColor3f(0.8,0.5,0.5); point(x+520,y-260); glColor3f(0.5,0.9,1.0); text(x+540,y-265,"Compression Stroke",0); glColor3f(0.9,1.0,0.5); point(x+520,y-280); glColor3f(0.5,0.9,1.0); text(x+540,y-285,"Working Stroke",0); glColor3f(0.9,0.95,0.95); point(x+520,y-300); glColor3f(0.5,0.9,1.0); text(x+540,y-305,"Exhaust Stroke",0); text(x-510,y-450,"Press 'space' to start/stop Press '+' to speedup engine Press '-' to slowdown engine",0); glFlush(); //quad(); } void start(){ if(status==1) { cb++; cc++; pointer+=0.5; } if(cc==100) { cc=0; } if(pointer==100) { pointer=0; } if(cb==100) cb=0; display(); //Game title if(cc==25){ if(s==0) s=1; else s=0; } Sleep(speed); } void keypress(unsigned char key, int x,int y){ if (key=='+') {speed--; if(speed<=0) speed=0;} if (key=='-') {speed++;if(speed>=500) speed=500;} if(key==' ') {if(status==0) status=1; else status=0; }} void myReshape(int w,int h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glOrtho(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,2.0*(GLfloat)h/(GLfloat)w,-10.0,10.0); glMatrixMode(GL_PROJECTION); } int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize (600, 600); glutCreateWindow("Introduction to Open GL"); glutReshapeFunc(myReshape); glutKeyboardFunc(keypress); glutDisplayFunc(display); glutIdleFunc(start); init(); glutMainLoop();

}

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments

Skip to toolbar