Advertisement
Dvortsov_D1

домики и машины

Mar 20th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 KB | None | 0 0
  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.  
  14. void render_square(double x, double y) {
  15.     glPushMatrix();
  16.  
  17.     double dx = 0.5;
  18.     double dy = 0.5;
  19.     glBegin(GL_POLYGON);
  20.     glVertex2f(x, y);
  21.     glVertex2f(x + dx, y);
  22.     glVertex2f(x + dx, y - dy);
  23.     glVertex2f(x, y - dy);
  24.     glEnd();
  25.     glPopMatrix();
  26. }
  27.  
  28. void draw_line(double x, double y, double x1, double y1) {
  29.     glBegin(GL_LINES);
  30.     glVertex2d(x, y);
  31.     glVertex2d(x1, y1);
  32.     glEnd();
  33. }
  34. void draw_home(double x , double y ){
  35.     draw_line(0+x,0+y,0.5+x,0+y);
  36.     draw_line(0+x,0+y,0+x,0.5+y);
  37.     draw_line(0+x,0.5+y,0.5+x,0.5+y);
  38.     draw_line(0.5+x,0+y,0.5+x,0.5+y);
  39.     draw_line(0+x,0.5+y,0.25+x,1+y);
  40.     draw_line(0.5+x,0.5+y,0.25+x,1+y);
  41.  
  42. }
  43.  
  44. void draw_car(double x , double y ){
  45.     draw_line(0.6+x,0.6+y,1.2+x,0.6+y);
  46.     draw_line(0.6+x,0.6+y,0.6+x,1.2+y);
  47.     draw_line(0.6+x,1.2+y,0.6+x,0.6+y);
  48.     draw_line(0.6+x,1.2+y,0.6+x,1.2+y);
  49. }
  50.  
  51. void Render() {
  52.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  53.         glLoadIdentity();
  54.         glTranslatef(0, 0, -10);
  55.         glColor3d(0.3, 1, 1);
  56.         glScalef(scale, scale, scale);
  57.  
  58.  
  59.         for(double x = -10; x < 10; x += 2) {
  60.             for (double y = -10; y < 10; y +=2){
  61.             draw_home(x, y);
  62.             }
  63.         }
  64.         draw_car(x,y);
  65.         glFlush();
  66. }
  67.  
  68. void update(int t) {
  69.     Render();
  70.     glutTimerFunc(50, update, 0);
  71. }
  72.  
  73. void keyb(unsigned char key, int x, int y) {
  74.     if(key == '+') {
  75.         scale *= 1.1;
  76.     }
  77.     if(key == '-') {
  78.         scale *= 0.9;
  79.     cout << key  << endl;
  80.     }
  81.  
  82.  
  83.     Render();
  84.  
  85. }
  86.  
  87. void reshape(int w, int h) {
  88.  
  89.     // предупредим деление на ноль
  90.     // если окно сильно перетянуто будет
  91.     if(h == 0)
  92.         h = 1;
  93.     float ratio = 1.0* w / h;
  94.  
  95.     // используем матрицу проекции
  96.     glMatrixMode(GL_PROJECTION);
  97.  
  98.         // Reset матрицы
  99.     glLoadIdentity();
  100.  
  101.     // определяем окно просмотра
  102.     glViewport(0, 0, w, h);
  103.  
  104.     // установить корректную перспективу.
  105.     gluPerspective(45,ratio,1,1000);
  106.  
  107.     // вернуться к модели
  108.     glMatrixMode(GL_MODELVIEW);
  109. }
  110.  
  111. int main(int argc, char **argv)
  112. {
  113.     glutInit(&argc, argv);
  114.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  115.     glutInitWindowSize(800, 600);
  116.     glutCreateWindow("Physics Engine");
  117.     glEnable(GL_DEPTH_TEST);
  118.     glMatrixMode(GL_PROJECTION);
  119.     glLoadIdentity();
  120.     glMatrixMode(GL_MODELVIEW);
  121.     glLoadIdentity();
  122.     glClearColor(137.0, 0.0, 255.0, 0.0);
  123.  
  124.     glutTimerFunc(50, update, 0);
  125.     glutReshapeFunc(reshape);
  126.     glutDisplayFunc(Render);
  127.     glutKeyboardFunc(keyb);
  128.     glutMainLoop();
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement