Advertisement
High_Light

screen_save

Apr 10th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.40 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 = 0.5;
  13. void render_square(double x, double y) {
  14.     glPushMatrix();
  15.  
  16.     double dx = 0.5;
  17.     double dy = 0.5;
  18.     glBegin(GL_POLYGON);
  19.     glVertex2f(x, y);
  20.     glVertex2f(x + dx, y);
  21.     glVertex2f(x + dx, y - dy);
  22.     glVertex2f(x, y - dy);
  23.     glEnd();
  24.     glPopMatrix();
  25. }
  26.  
  27. void draw_line(double x, double y, double x1, double y1) {
  28.     glBegin(GL_LINES);
  29.     glVertex2d(x, y);
  30.     glVertex2d(x1, y1);
  31.     glEnd();
  32. }
  33.  
  34. class Circle{
  35. public:
  36.     float x, y, radius, vx, vy;
  37.     Circle(float cx, float cy, float vx, float vy, float r) : x(cx), y(cy), radius(r), vx(vx), vy(vy) {}
  38.     void draw(){
  39.         float step = 0.04;
  40.         for (float f = 0; f <= M_PI * 2; f += step){
  41.             draw_line(x + radius * cos(f), y + radius * sin(f), x + radius * cos(f+step), y + radius * sin(f+step));
  42.         }
  43.     }
  44.     void draw_walls(double x1, double y1, double x2, double y2){
  45.         draw_line(x1, y1, x2, y1);
  46.         draw_line(x1, y1, x1, y2);
  47.         draw_line(x2, y1, x2, y2);
  48.         draw_line(x1, y2, x2, y2);
  49.     }
  50.     void update(){
  51.         double x1 = -4;
  52.         double y1 = -4;
  53.         double x2 = 4;
  54.         double y2 = 4;
  55.         draw_walls(x1, y1, x2, y2);
  56.             if (x >= x2 - radius || x <= x1 + radius)
  57.                 vx = -vx;
  58.             if (y >= y2 - radius || y <= y1 + radius)
  59.                 vy = -vy;
  60.         x += vx;
  61.         y += vy;
  62.     }
  63. };
  64.  
  65. Circle c1(0, 0, 0.1, 0.1, 0.8);
  66. //Circle c2(0, 1, -0.2, -0.07, 0.5);
  67. static float TIME = 0.0;
  68.  
  69. void Render() {
  70.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  71.         glLoadIdentity();
  72.         glTranslatef(0, 0, -10);
  73.         glColor3d(1, 1, 1);
  74.         glScalef(scale, scale, scale);
  75.  
  76.         c1.draw();
  77.         c1.update();
  78.         //c2.draw();
  79.         //c2.update();
  80.         glFlush();
  81. }
  82.  
  83. void update(int t) {
  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.1;
  91.     }
  92.     if(key == '-') {
  93.         scale *= 0.9;
  94.     }
  95.  
  96.     Render();
  97. }
  98.  
  99. void reshape(int w, int h) {
  100.  
  101.     // предупредим деление на ноль
  102.     // если окно сильно перетянуто будет
  103.     if(h == 0)
  104.         h = 1;
  105.     float ratio = 1.0* w / h;
  106.  
  107.     // используем матрицу проекции
  108.     glMatrixMode(GL_PROJECTION);
  109.  
  110.         // Reset матрицы
  111.     glLoadIdentity();
  112.  
  113.     // определяем окно просмотра
  114.     glViewport(0, 0, w, h);
  115.  
  116.     // установить корректную перспективу.
  117.     gluPerspective(45,ratio,1,1000);
  118.  
  119.     // вернуться к модели
  120.     glMatrixMode(GL_MODELVIEW);
  121. }
  122.  
  123. int main(int argc, char **argv)
  124. {
  125.     glutInit(&argc, argv);
  126.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  127.     glutInitWindowSize(800, 600);
  128.     glutCreateWindow("Physics Engine");
  129.     glEnable(GL_DEPTH_TEST);
  130.     glMatrixMode(GL_PROJECTION);
  131.     glLoadIdentity();
  132.     glMatrixMode(GL_MODELVIEW);
  133.     glLoadIdentity();
  134.     glClearColor(0., 0.0, 0, 0.0);
  135.  
  136.     glutTimerFunc(50, update, 0);
  137.     glutReshapeFunc(reshape);
  138.     glutDisplayFunc(Render);
  139.     glutKeyboardFunc(keyb);
  140.     glutMainLoop();
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement