Dvortsov_D1

движушие правильние многогранники

Mar 27th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.82 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. 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. static float TIME = 0.0;
  34. void draw_circle(float x0, float y0, float vx, float vy, float r, int n){
  35.     float step = M_PI*2.0f / n;
  36.     if (x0 + vx * TIME < 5.0){
  37.         vx = -vx;
  38.     }
  39.     for (float f = 0; f <= M_PI * 2; f += step){
  40.         draw_line(x0 + vx * TIME + r * cos(f), y0 + vy * TIME + r * sin(f), x0 + vx * TIME + r * cos(f+step), y0 + vy * TIME + r * sin(f+step));
  41.     }
  42. }
  43.  
  44. void Render() {
  45.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  46.         glLoadIdentity();
  47.         glTranslatef(0, 0, -10);
  48.         glColor3d(1, 1, 1);
  49.         glScalef(scale, scale, scale);
  50.         draw_circle(0.0, 0.2, 0.01, 0.0, 0.2, 8);
  51.         draw_circle(0.0, 0.0, -0.01, 0.0, 0.4, 6);
  52.         draw_circle(0.0, -0.2, 0.000, 0.0, 0.6, 18);
  53.         TIME += 2.5;
  54.         glFlush();
  55. }
  56.  
  57. void update(int t) {
  58.     Render();
  59.     glutTimerFunc(50, update, 0);
  60. }
  61.  
  62. void keyb(unsigned char key, int x, int y) {
  63.     if(key == '+') {
  64.         scale *= 1.1;
  65.     }
  66.     if(key == '-') {
  67.         scale *= 0.9;
  68.     }
  69.  
  70.     Render();
  71. }
  72.  
  73. void reshape(int w, int h) {
  74.  
  75.     // предупредим деление на ноль
  76.     // если окно сильно перетянуто будет
  77.     if(h == 0)
  78.         h = 1;
  79.     float ratio = 1.0* w / h;
  80.  
  81.     // используем матрицу проекции
  82.     glMatrixMode(GL_PROJECTION);
  83.  
  84.         // Reset матрицы
  85.     glLoadIdentity();
  86.  
  87.     // определяем окно просмотра
  88.     glViewport(0, 0, w, h);
  89.  
  90.     // установить корректную перспективу.
  91.     gluPerspective(45,ratio,1,1000);
  92.  
  93.     // вернуться к модели
  94.     glMatrixMode(GL_MODELVIEW);
  95. }
  96.  
  97. int main(int argc, char **argv)
  98. {
  99.     glutInit(&argc, argv);
  100.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  101.     glutInitWindowSize(800, 600);
  102.     glutCreateWindow("Physics Engine");
  103.     glEnable(GL_DEPTH_TEST);
  104.     glMatrixMode(GL_PROJECTION);
  105.     glLoadIdentity();
  106.     glMatrixMode(GL_MODELVIEW);
  107.     glLoadIdentity();
  108.     glClearColor(0., 0.0, 128.0, 0.0);
  109.  
  110.     glutTimerFunc(50, update, 0);
  111.     glutReshapeFunc(reshape);
  112.     glutDisplayFunc(Render);
  113.     glutKeyboardFunc(keyb);
  114.     glutMainLoop();
  115. }
Advertisement
Add Comment
Please, Sign In to add comment