daily pastebin goal
16%
SHARE
TWEET

Untitled

kilolilo Mar 20th, 2018 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <list>
  3. #include <cmath>
  4. #include <algorithm>
  5.  
  6. #include <GL/glut.h>
  7. #include <GL/gl.h>
  8. #include <GL/glu.h>
  9.  
  10. using namespace std;
  11.  
  12. double scale = 1.0;
  13. double car_x = 0, car_y = 0;
  14. double car_vx = 0, car_vy = 0;
  15. void render_square(double x, double y) {
  16.     glPushMatrix();
  17.  
  18.     double dx = 0.5;
  19.     double dy = 0.5;
  20.     glBegin(GL_POLYGON);
  21.     glVertex2f(x, y);
  22.     glVertex2f(x + dx, y);
  23.     glVertex2f(x + dx, y - dy);
  24.     glVertex2f(x, y - dy);
  25.     glEnd();
  26.     glPopMatrix();
  27. }
  28.  
  29. void draw_line(double x, double y, double x1, double y1) {
  30.     glBegin(GL_LINES);
  31.     glVertex2d(x, y);
  32.     glVertex2d(x1, y1);
  33.     glEnd();
  34. }
  35.  
  36. void draw_home(double x,double y){
  37.     draw_line(0+x,0+y,3+x,0+y);
  38.     draw_line(3+x,0+y,3+x,3+y);
  39.     draw_line(3+x,3+y,0+x,3+y);
  40.     draw_line(0+x,3+y,0+x,0+y);
  41.     draw_line(0+x,3+y,1.5+x,3.75+y);
  42.     draw_line(3+x,3+y,1.5+x,3.75+y);
  43.     draw_line(1.25+x,1.25+y,1.25+x,1.25+y);
  44.     draw_line(1.75+x,1.25+y,1.75+x,1.75+y);
  45.     draw_line(1.75+x,1.75+y,1.25+x,1.75+y);
  46.     draw_line(1.25+x,1.75+y,1.25+x,1.25+y);
  47.     draw_line(1.25+x,1.25+y,1.75+x,1.25+y);
  48.  
  49. }
  50. void draw_car(double x,double y){
  51.     glColor3d(1, 0, 0);
  52.     draw_line(0+x,0+y,1+x,0+y);
  53.     draw_line(1+x,0+y,1+x,1+y);
  54.     draw_line(1+x,1+y,0+x,1+y);
  55.     draw_line(0+x,1+y,0+x,0+y);
  56.  
  57. }
  58.  
  59. void Render() {
  60.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  61.         glLoadIdentity();
  62.         glTranslatef(0, 0, -10);
  63.         glColor3d(1, 1, 0);
  64.         glScalef(scale, scale, scale);
  65.  
  66.  
  67.         for(double x = -25; x < 25; x+= 5.5) {
  68.            for(double y = -25; y < 25; y+= 5.5) {
  69.  
  70.                 draw_home(x,y);
  71.             }
  72.  
  73.         }
  74.  
  75.         draw_car(car_x,car_y);
  76.  
  77.         glFlush();
  78. }
  79.  
  80. void update(int t) {
  81.     double dt = 0.05;
  82.     car_x += car_vx * dt;
  83.     car_y += car_vy * dt;
  84.     Render();
  85.     glutTimerFunc(50, update, 0);
  86. }
  87.  
  88. void keyb(unsigned char key, int x, int y) {
  89.     if(key == '+') {
  90.         scale *= 1.5;
  91.     }
  92.     if(key == '-') {
  93.         scale *= 0.5;
  94.     }
  95.     if(key == 'w'){
  96.         car_vy+=0.25;
  97.     }
  98.     if(key == 's'){
  99.         car_vy-=0.25;
  100.     }
  101.     if(key == 'a'){
  102.         car_vx-=0.25;
  103.     }
  104.     if(key == 'd'){
  105.         car_vx+=0.25;
  106.     }
  107.     if(key == ' '){
  108.         car_vx*=0.45;
  109.         car_vy*=0.45;
  110.     }
  111.  
  112.  
  113.     cout<<key<<endl;
  114.  
  115.     Render();
  116. }
  117.  
  118. void reshape(int w, int h) {
  119.  
  120.     // предупредим деление на ноль
  121.     // если окно сильно перетянуто будет
  122.     if(h == 0)
  123.         h = 1;
  124.     float ratio = 1.0* w / h;
  125.  
  126.     // используем матрицу проекции
  127.     glMatrixMode(GL_PROJECTION);
  128.  
  129.         // Reset матрицы
  130.     glLoadIdentity();
  131.  
  132.     // определяем окно просмотра
  133.     glViewport(0, 0, w, h);
  134.  
  135.     // установить корректную перспективу.
  136.     gluPerspective(45,ratio,1,1000);
  137.  
  138.     // вернуться к модели
  139.     glMatrixMode(GL_MODELVIEW);
  140. }
  141.  
  142. int main(int argc, char **argv)
  143. {
  144.     glutInit(&argc, argv);
  145.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  146.     glutInitWindowSize(800, 600);
  147.     glutCreateWindow("Physics Engine");
  148.     glEnable(GL_DEPTH_TEST);
  149.     glMatrixMode(GL_PROJECTION);
  150.     glLoadIdentity();
  151.     glMatrixMode(GL_MODELVIEW);
  152.     glLoadIdentity();
  153.     glClearColor(0.0, 0.5, 0.5, 1.0);
  154.  
  155.     glutTimerFunc(50, update, 0);
  156.     glutReshapeFunc(reshape);
  157.     glutDisplayFunc(Render);
  158.     glutKeyboardFunc(keyb);
  159.     glutMainLoop();
  160. }
RAW Paste Data
Top