kilolilo

Untitled

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