Advertisement
ElenaMednikova

Untitled

Nov 27th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.84 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_rectangle(float cx, float cy,float r){
  35.  
  36.     double da=2*M_PI/360;
  37.     for(double angle=0;angle<=2* M_PI;angle += da){
  38.         double x=r * cos(angle);
  39.         double y=r * sin(angle);
  40.         double angle2 = angle+da;
  41.         if(angle2 > 2*M_PI){
  42.             angle2=2* M_PI;
  43.         }
  44.  
  45.         double x1=r * cos(angle2);
  46.         double y1=r * sin(angle2);
  47.  
  48.         draw_line(x + cx, y + cy, x1 + cx, y1 + cy);
  49.     }
  50.     double dg=2*M_PI/12;
  51.         for(double angle=0;angle<=2* M_PI;angle += dg){
  52.             double x=r * cos(angle);
  53.             double y=r * sin(angle);
  54.             double x0=r*0.8 * cos(angle);
  55.             double y0=r*0.8 * sin(angle);
  56.  
  57.  
  58.  
  59.  
  60.             draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
  61. }
  62.         double dr=2*M_PI/60;
  63.             for(double angle=0;angle<=2* M_PI;angle += dr){
  64.                 double x=r * cos(angle);
  65.                 double y=r * sin(angle);
  66.                 double x0=r*0.9 * cos(angle);
  67.                 double y0=r*0.9 * sin(angle);
  68.  
  69.  
  70.  
  71.  
  72.                 draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
  73.     }
  74.  
  75. }
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84. double sx=0;
  85. double sy=0;
  86. double sx1=0;
  87. double sy1=0;
  88. //
  89. double DX = 0;
  90. double DY = 0;
  91. //
  92. void Render() {
  93.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  94.         glLoadIdentity();
  95.         glTranslatef(0, 0, -10);
  96.         glColor3d(1, 1, 1);
  97.         glScalef(scale, scale, scale);
  98.  
  99.         draw_rectangle(1,1,3);
  100.  
  101.        /* for(float t=0;t<2;t++){
  102.             for(float j=0;j<2;j++){
  103.  
  104.                 draw_rectangle(-t,-j,2,2,DX, DY);
  105.  
  106.             }
  107.         }
  108.  
  109.         draw_rectangle(0,0,2,2,DX, DY);
  110.         //draw_rectangle(2,0,2,2,DX,DY);
  111.         //render_square(0, 0);
  112. */
  113.         glFlush();
  114. }
  115.  
  116. void update(int t) {
  117.     Render();
  118.     glutTimerFunc(50, update, 0);
  119. }
  120.  
  121. void keyb(unsigned char key, int x, int y) {
  122.     if(key == 'a') {
  123.         DX -= 0.2;
  124.     }
  125.     if(key == 'd') {
  126.         DX += 0.2;
  127.     }
  128.     if(key == 'w') {
  129.         DY += 0.2;
  130.     }
  131.     if(key == 's') {
  132.         DY -= 0.2;
  133.     }
  134.  
  135.  
  136.     Render();
  137. }
  138.  
  139. void reshape(int w, int h) {
  140.  
  141.     // предупредим деление на ноль
  142.     // если окно сильно перетянуто будет
  143.     if(h == 0)
  144.         h = 1;
  145.     float ratio = 1.0* w / h;
  146.  
  147.     // используем матрицу проекции
  148.     glMatrixMode(GL_PROJECTION);
  149.  
  150.         // Reset матрицы
  151.     glLoadIdentity();
  152.  
  153.     // определяем окно просмотра
  154.     glViewport(0, 0, w, h);
  155.  
  156.     // установить корректную перспективу.
  157.     gluPerspective(45,ratio,1,1000);
  158.  
  159.     // вернуться к модели
  160.     glMatrixMode(GL_MODELVIEW);
  161. }
  162.  
  163. int main(int argc, char **argv)
  164. {
  165.     glutInit(&argc, argv);
  166.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  167.     glutInitWindowSize(800, 600);
  168.     glutCreateWindow("Physics Engine");
  169.     glEnable(GL_DEPTH_TEST);
  170.     glMatrixMode(GL_PROJECTION);
  171.     glLoadIdentity();
  172.     glMatrixMode(GL_MODELVIEW);
  173.     glLoadIdentity();
  174.     glClearColor(0., 0.0, 128.0, 0.0);
  175.  
  176.     glutTimerFunc(50, update, 0);
  177.     glutReshapeFunc(reshape);
  178.     glutDisplayFunc(Render);
  179.     glutKeyboardFunc(keyb);
  180.     glutMainLoop();
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement