ruhul0

bus

Sep 5th, 2020
1,265
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include <windows.h>
  5. #include <glut.h>
  6. #define pi (2*acos(0.0))
  7.  
  8. int x;
  9. double angle;
  10. double incx=0, incy;
  11. int state;
  12. double points;
  13.  
  14. struct point
  15. {
  16.     double x,y,z;
  17. };
  18. void draw_tri()
  19. {
  20.     glBegin(GL_POLYGON);
  21.         glVertex2f(10, 10);
  22.         glVertex2f(10, 0);
  23.         glVertex2f(-10, 0);
  24.     glEnd();
  25. }
  26. void push_pop(void)
  27. {
  28.     glPushMatrix();
  29.         //glRotatef(45, 0, 0, 1);
  30.         glPushMatrix(); // Furthest Triangle, Draw first
  31.             //glRotatef(45, 0, 0, 1);
  32.             glTranslatef(-20, 0, 0);
  33.             glScaled(0.5, 2, 0);
  34.             glColor3f(0.0, 0.0, 1.0);
  35.             draw_tri();
  36.  
  37.         glPopMatrix();
  38.         glPushMatrix(); // Middle Triangle, Draw 2nd
  39.             glColor3f(0.0, 1.0, 0.0);
  40.             draw_tri();
  41.         glPopMatrix();
  42.  
  43.         glPushMatrix(); // Nearest Triangle, Draw last
  44.             glTranslatef(20, 0, 0);
  45.             glColor3f(1.0, 0.0, 0.0);
  46.             draw_tri();
  47.         glPopMatrix();
  48.  
  49.     glPopMatrix();
  50.  
  51. }
  52.  
  53.  
  54. void drawAxes()
  55. {
  56.  
  57.     glColor3f(1.0, 1.0, 1.0);
  58.     glBegin(GL_LINES);{
  59.         glVertex3f( 100,0,0);
  60.         glVertex3f(-100,0,0);
  61.  
  62.         glVertex3f(0,-100,0);
  63.         glVertex3f(0, 100,0);
  64.  
  65.         glVertex3f(0,0, 100);
  66.         glVertex3f(0,0,-100);
  67.     }glEnd();
  68.  
  69. }
  70.  
  71.  
  72. void drawGrid()
  73. {
  74.     int i;
  75.  
  76.     glColor3f(0.6, 0.6, 0.6);   //grey
  77.     glBegin(GL_LINES);{
  78.         for(i=-8;i<=8;i++){
  79.  
  80.             if(i==0)
  81.                 continue;   //SKIP the MAIN axes
  82.  
  83.             //lines parallel to Y-axis
  84.             glVertex3f(i*10, -90, 0);
  85.             glVertex3f(i*10,  90, 0);
  86.  
  87.             //lines parallel to X-axis
  88.             glVertex3f(-90, i*10, 0);
  89.             glVertex3f( 90, i*10, 0);
  90.         }
  91.     }glEnd();
  92.  
  93. }
  94.  
  95. void drawSquare(double a)
  96. {
  97.     //glColor3f(1.0,0.0,0.0);
  98.     glBegin(GL_QUADS);{
  99.         glVertex3f( a, a,0);
  100.         glVertex3f( a,-a,0);
  101.         glVertex3f(-a,-a,0);
  102.         glVertex3f(-a, a,0);
  103.     }glEnd();
  104. }
  105.  
  106. void rec_animation()
  107. {
  108.     glColor3f(0,1,0);
  109.     //glRotatef(5*angle,0,0,1);
  110.     glTranslatef(incx,incy,0);
  111.     glRotatef(5*angle,0,0,1);
  112.     drawSquare(5);
  113.  
  114. }
  115. void draw_rec()
  116. {
  117.  
  118.     drawSquare(1);
  119.  
  120. }
  121.  
  122. void simple_trans()
  123. {
  124.     glPushMatrix();
  125.         glPushMatrix();
  126.             glRotatef(10*angle, 0, 0, 1);
  127.             //glTranslatef(20, 0, 0);
  128.             glColor3f(1.0, 1.0, 1.0);
  129.             draw_rec();
  130.         glPopMatrix();
  131.  
  132.  
  133.  
  134.         glRotatef(angle, 0, 0, 1);
  135.         glTranslatef(20, 0, 0);
  136.         glRotatef(angle, 0, 0, 1);
  137.  
  138.         glColor3f(0.0, 0.0, 1.0);
  139.  
  140.         draw_rec();
  141.     glPopMatrix();
  142. }
  143.  
  144. /*
  145. You will implement the following function to produce the simulation in the video.
  146.  
  147. */
  148. void body()
  149. {
  150.     //rectangle
  151.     glBegin(GL_QUADS);{
  152.         glVertex3f( 30, 10,0);
  153.         glVertex3f( 30,-10,0);
  154.         glVertex3f(-30,-10,0);
  155.         glVertex3f(-30, 10,0);
  156.     }glEnd();
  157. }
  158. void cycle()
  159. {
  160.     //tire
  161.     glBegin(GL_QUADS);{
  162.         glVertex3f( 10, 2,0);
  163.         glVertex3f( 10,-2,0);
  164.         glVertex3f(-10,-2,0);
  165.         glVertex3f(-10, 2,0);
  166.     }glEnd();
  167.     glBegin(GL_QUADS);{
  168.         glVertex3f( 2, 10,0);
  169.         glVertex3f( 2,-10,0);
  170.         glVertex3f(-2,-10,0);
  171.         glVertex3f(-2, 10,0);
  172.     }glEnd();
  173. }
  174. void BusMove_Assignment()
  175. {
  176.     glPushMatrix();
  177.     glTranslatef(incx,incy,0);
  178.  
  179.     glPushMatrix();
  180.     glRotatef(angle,0,0,1);
  181.     glColor3f(0,0,1);
  182.     cycle();
  183.     glPopMatrix();
  184.  
  185.     glPushMatrix();
  186.     glTranslatef(30,0,0);
  187.     glRotatef(angle,0,0,1);
  188.     glColor3f(0,1,0);
  189.     cycle();
  190.     glPopMatrix();
  191.  
  192.     glPushMatrix();
  193.     glTranslatef(15,10,0);  //<--
  194.     glColor3f(1,0,0);
  195.     body();
  196.     glPopMatrix();
  197.     glPopMatrix();
  198. }
  199.  
  200. void display(){
  201.  
  202.     //clear the display
  203.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  204.     glClearColor(0,0,0,0);  //color black
  205.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  206.  
  207.  
  208.  
  209.     glMatrixMode(GL_MODELVIEW);
  210.  
  211.  
  212.     glLoadIdentity();
  213.  
  214.  
  215.     gluLookAt(0,0,70,   0,0,0,  0,1,0);
  216.  
  217.  
  218.  
  219.     glMatrixMode(GL_MODELVIEW);
  220.  
  221.     BusMove_Assignment();
  222.  
  223.     drawAxes();
  224.     drawGrid();
  225.     //BusMove_Assignment();
  226.  
  227.  
  228.  
  229.  
  230.  
  231.     //ADD this line in the end --- if you use double buffer (i.e. GL_DOUBLE)
  232.     glutSwapBuffers();
  233. }
  234.  
  235.  
  236. void animate(){
  237.     //rotation
  238.     angle-=0.1; //speed of rotation
  239.     incx+=0.01;
  240.     points+=0.005;
  241.  
  242.     glutPostRedisplay();
  243. }
  244.  
  245. void init(){
  246.     //codes for initialization
  247.     angle=0;
  248.  
  249.     //clear the screen
  250.     glClearColor(0,0,0,0);
  251.  
  252.  
  253.     //load the PROJECTION matrix
  254.     glMatrixMode(GL_PROJECTION);
  255.  
  256.     //initialize the matrix
  257.     glLoadIdentity();
  258.  
  259.     //give PERSPECTIVE parameters
  260.     gluPerspective(80,  1,  1,  1000.0);
  261.  
  262. }
  263.  
  264. int main(int argc, char **argv){
  265.     glutInit(&argc,argv);
  266.     glutInitWindowSize(500, 500);
  267.     glutInitWindowPosition(0, 0);
  268.     glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);   //Depth, Double buffer, RGB color
  269.  
  270.     glutCreateWindow("My OpenGL Program");
  271.  
  272.     init();
  273.  
  274.     glEnable(GL_DEPTH_TEST);    //enable Depth Testing
  275.  
  276.     glutDisplayFunc(display);   //display callback function
  277.     glutIdleFunc(animate);      //what you want to do in the idle time (when no drawing is occuring)
  278.  
  279.     //glutKeyboardFunc(keyboardListener);
  280.     //glutSpecialFunc(specialKeyListener);
  281.     //glutMouseFunc(mouseListener);
  282.  
  283.     glutMainLoop();     //The main loop of OpenGL
  284.  
  285.     return 0;
  286. }
  287.  
  288.  
  289.  
RAW Paste Data