Advertisement
High_Light

oop2.1

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