kilolilo

Untitled

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