kilolilo

Untitled

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